Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用C++;VS内C#的DLL失败。在VS外部运行exe,它就可以工作了 我有一个C++的DLL,它被从C控制台应用程序调用如下。p>_C#_C++_.net_Pinvoke_Calling Convention - Fatal编程技术网

调用C++;VS内C#的DLL失败。在VS外部运行exe,它就可以工作了 我有一个C++的DLL,它被从C控制台应用程序调用如下。p>

调用C++;VS内C#的DLL失败。在VS外部运行exe,它就可以工作了 我有一个C++的DLL,它被从C控制台应用程序调用如下。p>,c#,c++,.net,pinvoke,calling-convention,C#,C++,.net,Pinvoke,Calling Convention,在VisualStudio中运行调试时,它会抛出一个异常,指出堆栈不稳定,并检查方法参数是否正确。但是,如果我从Windows资源管理器在VS之外运行*.exe,它会按预期将数据重新运行到屏幕上 如何在VisualStudio中运行此功能 谢谢 **From the C++ header file:** #ifdef RFIDSVRCONNECT_EXPORTS #define RFID_CONN_API __declspec(dllexport) #else #define RFID_CONN

在VisualStudio中运行调试时,它会抛出一个异常,指出堆栈不稳定,并检查方法参数是否正确。但是,如果我从Windows资源管理器在VS之外运行*.exe,它会按预期将数据重新运行到屏幕上

如何在VisualStudio中运行此功能

谢谢

**From the C++ header file:**
#ifdef RFIDSVRCONNECT_EXPORTS
#define RFID_CONN_API __declspec(dllexport)
#else
#define RFID_CONN_API __declspec(dllimport)
#endif

RFID_CONN_API BSTR rscListDevices( long showall ) ;


[DllImport("MyDLL.dll")]
[return: MarshalAs(UnmanagedType.BStr)]
public static extern string rscListDevices(int showall);

static void Main(string[] args)
{
  string data= rscListDevices(0);
  Console.WriteLine(data);
  Console.ReadKey();
}

首先,确保在和中使用相同的调用约定

我怀疑编译器选项已设置(因为它是默认设置的),所以用作未标记函数的默认调用约定

您可以通过在C#代码中指定相同的调用约定来修复崩溃:

或者将
rscListDevices
的调用约定更改为(这是C#中的默认值):

您还可以通过手动或使用Project属性对话框将编译器选项从/gd转换为/gz,将C++代码中的未标记函数设置为代码>

但是如果你真的想禁用MDA,你可以去Debug->Exceptions并取消选中Managed Debugging Assistance


您可以阅读更多关于PinvokesTack和MDA的信息。

C/C++头文件中正确的方法签名是什么?问题可能是您的P/Invoke签名不正确。RFID\u CONN\u API BSTR rscListDevices(长showall);RFID连接API是如何定义的?@NikolayKhil用RFID连接API定义更新了问题。我宁愿得到C++引用,如果需要改变C++代码,就可以工作了。有什么想法吗?”乔恩,没有正确的或错误的C++调用约定,重要的是C++和C语言约定匹配。这与VS2012中的调用约定,但不是在VS2010中。VS2010返回一个空白string@Jon请用函数体更新您的问题。我怀疑那里出了什么问题。
[DllImport("MyDLL.dll", CallingConvention=CallingConvention.Cdecl))]
[return: MarshalAs(UnmanagedType.BStr)]
public static extern string rscListDevices(int showall);
RFID_CONN_API BSTR __stdcall rscListDevices( long showall ) ;