gpt4 book ai didi

c# - 如何使用后期绑定(bind)调用 native C 库?

转载 作者:太空狗 更新时间:2023-10-29 21:39:37 25 4
gpt4 key购买 nike

我一直在寻找加载 native C 库并使用后期绑定(bind)调用其方法的示例。在加载托管库而不是 native C 库时,我已经看到了很多示例。

native 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;
}

如何使用后期绑定(bind)加载 DLL 并调用这两个方法?

提前致谢。洛杉矶


我应该提到我需要加载库并从 C# 应用程序调用这些方法。

最佳答案

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

获得IntPtr后,使用GCHandle.FromIntPtr将其转换为GCHandle,然后使用GCHandle获取委托(delegate).Target 属性。一旦你有了你的委托(delegate),就可以像往常一样调用它。不过,请确保正确装饰委托(delegate),它仍然必须与 C 代码中的调用约定相匹配。

关于c# - 如何使用后期绑定(bind)调用 native C 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32448099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com