第一:如果标题不对,我很抱歉。我不知道怎么说出我的问题。
在我的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
如果object
是string
则使用Marshal.StringToHGlobalAnsi
如果它是其他类型的,则根据需要进行不同的编组。
如果有人有更好的解决方案,请随时写信:)