在我的C#.Net应用程序中,我使用带有DllImport的C ++ DLL C ++ DLL包含枚举定义:
enum mode { A, B, C };
class myClass {
char name[512];
mode myMode; //variables beneath this line cause crash
char pass[512];
};
我在C#.Net app中定义了相同的enum
:
public enum mode { A, B, C };
现在,如果我访问myclass
行之后定义的myMode
变量,则会出现内存损坏错误:
getName(); //ok
getPass(); //error
extern "C" LPCTSTR FAR PASCAL EXPORT getPass() { return myC->pass; }
C#wrapper:
[DllImport(DLLNAME)]
public static extern string GetPass();
作为一种解决方法,我使用int
作为myMode
的类型,一切正常。但我很好奇如何正确行事。
答案 0 :(得分:2)
您写道:
// .cpp
extern "C" LPCTSTR FAR PASCAL EXPORT getPass() { return myC->pass; }
// .cs
[DllImport(DLLNAME)]
public static extern string GetPass();
Ew ......应该是
[DllImport(DLLNAME)]
public static extern string getPass();
我不知道C#是否区分大小写,但AFAIK是。
我无法理解的另一个技巧是LPCTSTR
。由于使用了LPCSTR
,它应该是char[]
吗?而且,嗯...... C#真的需要PASCAL
惯例吗?