【问题标题】:How to use a dll?如何使用一个dll?
【发布时间】:2009-11-20 01:01:48
【问题描述】:

我有一个 .dll 文件和它的 .lib 文件。

DLL 与电子钥匙阅读器对话,并允许您读取/写入钥匙 ID。

这是随附的唯一文档:

DLL Usage:
boolean = object.DevicePresent (PROPERTY: true if the device is present)
boolean = object.KeyPresent (PROPERTY: true if a key is in the device)
long = object.KeyId (PROPERTY: gets the keys id)
object.WriteKeyId KeyId (METHOD: Writes new id to the key)
Private Sub object_KeyRemoved (EVENT: Key removed)

我以前从未使用过 DLL,我真的不知道我应该如何在 C 程序中使用它。我真的不知道过去会做什么:

#include <stdlib.h>
#include <windows.h>

typedef int (__cdecl *MYPROC)(LPWSTR); 
int main(int argc, char *argv[])
{
 HINSTANCE hinstLib; 
 hinstLib = LoadLibrary(TEXT("ekey.dll")); 
 if (hinstLib != NULL) 
 { 
   //now what? how do i get the properties or call a method?
 }
 return 0;
}

如果有人可以向我展示如何获取 DevicePresent 以及如何使用 WriteKeyId 的示例,我将非常感激!

【问题讨论】:

  • 你使用的是什么框架/IDE/编译器?

标签: c winapi dll


【解决方案1】:

该文档表明 DLL 是一个 OCX,旨在与 Visual Basic 一起使用。

试试 regsvr32 就可以了。如果喜欢它,您可以从 Visual Studio 为它构建必要的 COM API。

很难安排从 C 中直接调用这类东西,但您可以尝试使用 dumpbin 查看它并查看它导出的内容。

根据评论,将 DLL 的#import 添加到 C 程序是最快的方法。

【讨论】:

  • 如果 dll 是供 Visual Basic 使用的 OCX,然后尝试使用 #import 导入它。然后在中间文件夹中查找应该产生更多信息的自动生成的头文件。问题可能取决于对 COM 的理解。
【解决方案2】:

这是一个 COM DLL。这使得它几乎不可能在直接 C 中使用。

【讨论】:

  • 不是真的。生成一组headers,你可以从C调用com。MS支持。
【解决方案3】:

GetProcAddress()。确保使用 dumpbin /exports Foo.dll 导出符号

例如

BOOL *pPresent = (BOOL *)GetProcAddress(hInstLib, _T("DevicePresent"));
if (pPresent) {
  printf("%d\n", *pPresent);
}

警告您必须知道此对象在二进制级别的确切数据类型!在比较 VB Platform SDK 数据类型的地方可能有一个参考。

【讨论】:

  • 想详细说明一下?就目前而言,这不是很有帮助。
  • 这不太可能有帮助。在 COM DLL 中,您要调用的函数通常根本不会导出。有一些微弱的希望,即 .lib 文件的存在表明导出了一些有用的东西,但它们可能与记录的 API 不对应。
猜你喜欢
  • 2012-04-28
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
相关资源
最近更新 更多