我一直在寻找加载本机C库并使用后期绑定调用其方法的示例。我在加载托管库时看到了很多例子,但没有看到本地C库。
本机C库定义以下内容:
#define DllExport __declspec( dllexport )
typedef void (*CALLBACK_T)(long, void *);
CALLBACK_T g_Callback=NULL;
DllExport BOOL GetVersion(char *szVersion)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
strcpy( szVersion, GetAppVersion());
return TRUE;
}
DllExport void SetCallbackFunction(CALLBACK_T f)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
g_Callback = f;
return;
}
如何使用后期绑定加载DLL并调用这两种方法?
提前谢谢。 LA我应该提一下,我需要加载库并从c#应用程序中调用这些方法。
答案 0 :(得分:2)
在Windows中只有一种获取函数地址的方法:GetProcAddress
。你必须自己导入它,然后按名称加载你想要的任何功能。它返回IntPtr
。
获得IntPtr
后,将其转换为GCHandle
GCHandle.FromIntPtr
,然后获取具有GCHandle.Target
属性的委托。获得代表后,请按照正常情况进行调用。确保你正确地装饰你的委托,它仍然必须匹配你的C代码中的调用约定。