相关疑难解决方法(0)

PInvoke for C函数返回char*

我正在尝试编写一些从非托管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#中的字符串?

c# pinvoke

45
推荐指数
3
解决办法
2万
查看次数

如何将字符串从原生iOS插件返回到统一?

我正在创建一个iOS插件,需要将一个字符串(或const char*)返回给Unity.我该如何实现它?

xcode unity-game-engine

6
推荐指数
2
解决办法
4983
查看次数

如何在C#String和C Char指针之间进行转换

我有一个用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函数并让它返回一个字符串呢?

c c#

1
推荐指数
1
解决办法
1459
查看次数

标签 统计

c# ×2

c ×1

pinvoke ×1

unity-game-engine ×1

xcode ×1