我有一个C++ dll,我正在使用Pinvoke。只有第一个字符在pinvoke字符串中传递
方法签名为如下:
C++:
EXTERN_C BOOL std_call MyCppMethod(LPCSTR param1, LPCSTR param2);
C#:
[DllImport("MyDll.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern bool MyCppMethod(
/*[MarshalAs(UnmanagedType.LPWStr)]*/ string param1,
/*[MarshalAs(UnmanagedType.LPWStr)]*/ string param2
);
出于技术原因我替换一个lib的DLL,并且包裹的lib与dll使用EXPORTS.def文件和EXPORTS声明从lib中导出方法。 因为我吃饭,我看到一个奇怪的行为。而不是在方法实现中获取字符串,我只获得第一个字符。
我曾尝试替换调用约定,使用marshalAs LPCWSTR,并试图用char *替换C++ decleration中的lpcstr。 非上述帮助我解决了这个问题,我仍然只获得第一个字符。
为什么会发生这种情况,我该如何解决这个问题?
你的CharSet是完全错误的。 LPCSTR要求CharSet.Ansi –
谢谢。我刚刚弄明白了:)但你能想到它的原因为什么它没有失败,当它是一个DLL而不是一个库? – user844541