我需要在C#应用程序的DLL中使用C函数库。我在用char *参数调用DLL函数时遇到麻烦:
C DLL:
extern "C" __declspec(dllexport) int CopyFunc(char *, char *);
int CopyFunc(char *dest, char *src)
{
strcpy(dest, src);
return(strlen(src));
}
Run Code Online (Sandbox Code Playgroud)
C#应用程序需要看起来像这样:
[DllImport("dork.dll")]
public static extern int CopyFunc(string dst, string src);
int GetFuncVal(string source, string dest)
{
return(CopyFunc(dest,source));
}
Run Code Online (Sandbox Code Playgroud)
我已经看到了使用string或StringBuilder或IntPtr代替DLL函数原型所需的char *的示例,但是我无法使它们中的任何一个起作用。我得到的最常见的例外是PInvoke正在取消堆栈的平衡,因为函数调用与原型不匹配。
有一个简单的解决方案吗?
像这样更新您的外部函数的P / Invoke声明:
[DllImport("dork.dll")]
public static extern int CopyFunc([MarshalAs( UnmanagedType.LPStr )]string a, [MarshalAs( UnmanagedType.LPStr )] string b);
int GetFuncVal(string src, string dest)
{
return(CopyFunc(dest,src));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3659 次 |
| 最近记录: |