如何使用延迟绑定调用本机C库
How to call native C library using late binding?
我一直在寻找加载本地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
在Windows中只有一种方法可以获得函数地址:GetProcAddress
。您必须自己导入它,然后按名称加载您想要的任何函数。它返回一个IntPtr
一旦你有了你的IntPtr
,用GCHandle.FromIntPtr
把它转换成GCHandle
,然后用GCHandle.Target
属性获得委托。一旦你有了委托,像平常一样调用它。请确保你正确地修饰你的委托,它仍然必须匹配你的C代码中的调用约定。
相关文章:
- 在这种情况下,java对象是否可以调用本机函数
- 多次调用本机方法时出现致命错误
- 如何使用JNI从Android本机C++调用PackageManager.hasSystemFeature?
- 努力使用 C# 从本机 DLL 调用该方法
- Java 1.8 本机 System.load 通过 JNI 调用C++产生 TLSv1.如何获取 TLSv1.2?
- 终止调用本机代码的 .Net 线程
- Android 无法从本机代码调用 Java 方法 JNI
- 如何在本机C++中跨线程调用(在主线程上回调)
- 最佳实践:我应该使用 std::thread、boost 还是本机调用
- 在使用该名称创建变量后调用本机 C 函数
- AccessViolationException从托管C (ASP.NET的包装器)调用本机C 代码
- clr 如何使用本机 c++ dll 的引用'&'参数调用函数?
- 如何从 JNI 传递 std::list 参数来调用本机 C++ 函数
- 从 Android 中的原生 c++ 文件调用本机 opencv
- NDK - 包含一个预构建的库,并在 Android 项目中调用本机函数
- 当我将 c++ DLL(我从 c# 调用)重新生成为 /CLR(最初是本机)时,性能下降了一半
- 跟踪本机调用
- 从本机调用C#以检索字符串
- 从本机C++调用.NET dll
- 在一个程序集中从本机调用c#