如何使用延迟绑定调用本机C库

How to call native C library using late binding?

本文关键字:本机 调用 绑定 何使用 延迟      更新时间:2023-10-16

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

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

一旦你有了你的IntPtr,用GCHandle.FromIntPtr把它转换成GCHandle,然后用GCHandle.Target属性获得委托。一旦你有了委托,像平常一样调用它。请确保你正确地修饰你的委托,它仍然必须匹配你的C代码中的调用约定。