第一:如果标题不对,我很抱歉。我不知道怎么说出我的问题。
在我的C API中,我有一个函数:

MYAPI_STATUS SetParam(void *hInst, unsigned long param, void *value);

此函数根据param类型接受不同类型的指针。这样地:
SetParam(hInst, 1, (void*)"somevalue");
int x = 55;
SetParam(hInst, 2, &x);

我只是用C#编写一个包装器/绑定,我遇到了一个问题。
[DllImport("myapi", CallingConvention = CallingConvention.Cdecl]
public static extern uint SetParam(IntPtr hInst, uint paramCode, IntPtr paramValue);

从C复制行为的最佳方法是什么?所以这个函数看起来像:
public static uint SetParam(IntPtr hInst, uint paramCode, ref object paramValue);

或者可能:
public static uint SetParam(IntPtr hInst, uint paramCode, object paramValue);

最佳答案

我通过手动编组来解决这个问题,首先检查类型object如果objectstring则使用Marshal.StringToHGlobalAnsi如果它是其他类型的,则根据需要进行不同的编组。
如果有人有更好的解决方案,请随时写信:)

10-05 18:25