如何将某些C++方法转换为 C# 调用

How to convert some C++ method to C# call?

本文关键字:转换 调用 方法 C++      更新时间:2023-10-16

我有一个C++dll,在标头中包含此方法(C++代码):

   enum Error
   {
          Error1,
          Error2,
          Error3,
   }
   void foo(const char* str, Error &err) ;

我正在尝试使用 DllImport 属性调用此方法,但没有成功。我可以毫无问题地调用此 dll 上的所有其他方法。

在DllImport上,我将foo方法转换为:

   enum Error
   {
          Error1,
          Error2,
          Error3,
   }
   [DllImport("dll_name.dll")]
   public static extern void foo(string str, ref Error err);

但这也不起作用。我还尝试在字符串上使用"MarshalAs(UnmanagedType.LPStruct)",并尝试更改 dllImport 属性 => 上的"CharSet",但没有任何效果

我会

尝试这个,我注意到缺乏空白。

enum Error
{
      Error1,
      Error2,
      Error3,
}
[DllImport("dll_name.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void foo([MarshalAs(UnmanagedType.LPStr)] string str, ref Error err);

我还会确保该方法在您的应用程序中可见。由业力庞格注意到

编辑:您可以尝试更改调用约定。如果您得到的异常是堆栈不平衡,这应该可以解决问题。