如何使用后期绑定调用本机C库?

时间:2015-09-08 01:47:45

标签: c# c++ c

我一直在寻找加载本机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#应用程序中调用这些方法。

1 个答案:

答案 0 :(得分:2)

在Windows中只有一种获取函数地址的方法:GetProcAddress。你必须自己导入它,然后按名称加载你想要的任何功能。它返回IntPtr

获得IntPtr后,将其转换为GCHandle GCHandle.FromIntPtr,然后获取具有GCHandle.Target属性的委托。获得代表后,请按照正常情况进行调用。确保你正确地装饰你的委托,它仍然必须匹配你的C代码中的调用约定。