我正在尝试编写一些从非托管DLL调用方法的C#代码.dll中函数的原型是:
extern "C" __declspec(dllexport) char *foo(void);
Run Code Online (Sandbox Code Playgroud)
在C#中,我首先使用:
[DllImport(_dllLocation)]
public static extern string foo();
Run Code Online (Sandbox Code Playgroud)
它似乎在表面上工作,但我在运行时遇到内存损坏错误.我想我指的是记忆恰好是正确的,但已经被释放了.
我尝试使用名为"P/Invoke Interop Assistant"的PInvoke代码生成实用程序.它给了我输出:
[System.Runtime.InteropServices.DLLImportAttribute(_dllLocation, EntryPoint = "foo")]
public static extern System.IntPtr foo();
Run Code Online (Sandbox Code Playgroud)
它是否正确?如果是这样,我如何将此IntPtr转换为C#中的字符串?
我正在创建一个iOS插件,需要将一个字符串(或const char*)返回给Unity.我该如何实现它?
我有一个用C编写的大型库,我想在C#程序中用作DLL.大多数C代码将由库自己的函数使用,但我确实需要一个函数才能从C#项目中调用.
所以下面有一个C函数示例
__declspec(dllexport) char* test(char* a){
char* b = "World";
char* result = malloc(strlen(a) + strlen(b) + 1);
strcpy(result, a);
strcpy(result, b);
return result;
}
Run Code Online (Sandbox Code Playgroud)
现在我已经获得了C#代码using System.Running.InteropServices;
,[DllImport("mydll.dll")]但我不知道如何声明该函数.
public static extern char* test(char* a); 显然不起作用,因为C#不支持像C这样的指针.
那么我应该如何将一个字符串传递给这个C函数并让它返回一个字符串呢?