.net应用程序中的C ++枚举崩溃了

时间:2011-03-29 14:23:45

标签: .net c++ interop dllimport

在我的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的类型,一切正常。但我很好奇如何正确行事。

1 个答案:

答案 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惯例吗?