ija*_*vid 2 c# c++ dll pinvoke dllimport
我有一个用C++编写的dll,我想用C#调用它.函数输出outputChar和deadChar,deadChar变量也由C++函数读取.
我试图以不同的方式从C#调用函数,但是我一直得到AccessViolationException:"试图读取或写入受保护的内存.这通常表明其他内存已损坏."
C++ DLL:
extern "C" _declspec (dllexport) int convertVirtualKeyToWChar(int virtualKey, PWCHAR outputChar, PWCHAR deadChar);
Run Code Online (Sandbox Code Playgroud)
C#代码1:
[DllImport("keylib.dll")]
static extern int convertVirtualKeyToWChar(int virtualKey,
StringBuilder output,
StringBuilder deadchar);
Run Code Online (Sandbox Code Playgroud)
C#代码2:
static extern int convertVirtualKeyToWChar(int virtualKey,
out char output,
ref char deadchar);
Run Code Online (Sandbox Code Playgroud)
注意:PWCHAR函数 的两个参数convertVirtualKeyToWChar是不明确的.它们可以指向单个WCHAR指针或指向WCHAR字符串的指针.给定函数和参数的名称,这个答案假定它们是指向单个的指针WCHAR.
您想要使用以下内容:
Run Code Online (Sandbox Code Playgroud)[DllImport("keylib.dll", CharSet=CharSet.Unicode, CallingConvention=CallingConvention.Cdecl)] static extern int convertVirtualKeyToWChar( int virtualKey, out char output, ref char deadchar );
崩溃的原因有两个: DllImport默认为ANSI字符集和StdCall调用约定.您的C++ DLL没有指定任何调用约定,因此它将默认为CDecl.
请参阅DllImportAttribute.CallingConvention和DllImportAttribute.CharSet
| 归档时间: |
|
| 查看次数: |
1026 次 |
| 最近记录: |