2011-12-20 41 views
4

我不知道如何做到以下几点:如何在VC++ 6.0项目中使用DLL而不需要.h和.lib文件?

  • 我使用微软的Visual C++ 6.0
  • 我有一个Win32 DLL项目,该项目是编译。
  • 我有另一个项目,此时它通过包括它使用 DLL中的Win32控制台项目的头文件和链接的 DLL中的.lib文件。

现在我想要另一个项目,类似于第二个BUT而不使用头文件和lib文件。

这可能吗?我读到的每个地方都需要dll + lib + h或dll + h。如果认为如果你知道接口,一个DLL文件就足够了?

顺便说一句,通过“使用DLL”我的意思是,利用在DLL中定义的类和函数。

+1

为什么你不想使用标题? – Mat

+2

如果没有声明它们,你会如何“知道接口”?这通常在头文件中。 .lib文件可帮助链接器找出需要使用的DLL。你可以使用LoadLibrary + GetProcAddress来实现它。 –

+0

@Jane - 我会想象其他Win32 DLL项目,你认为没有.h或.lib实际上确实有它们。否则,您将需要自己查找函数和类签名(我怎么样,我不知道)。我怀疑彻底调查项目属性会揭示“缺失”声明(lib或标题)。 – Dennis

回答

4

这是可能的,如果你只是简单的“外部C”功能。如果是这种情况,这种方法可能是用LoadLibrary加载DLL,然后用GetProcAddress导入每个函数,当然你需要知道函数签名来创建一个正确声明的函数指针。几乎不可能使用每个相反的类。

+2

我想你可以使用类,如果你有一个工厂函数,你可以在DLL中调用。有一个简单的C函数,它创建并返回一个指向所需类实例的指针。然后加载该库,并在该工厂函数上使用GetProcAddress并调用它来获取该类。实际上,你只能在DLL中使用1个函数,它为你提供了一个用于所有其他交互的根对象。 – Nerdtron

+0

@Nerdtron是同意的,但是必须根据该策略创建dll。 –

0

如果您的DLL包含类,它很有可能是一个COM组件。

如果是这种情况,#import指令(如#include使用的那样)将生成一些包含接口详细信息的临时包含文件。你应该使用COM来访问你的对象。否则,如果您使用C++类具有“普通”DLL,那么可以使用链接器访问导出的符号:指示它转储映射(请参阅here),以了解重新命名的名称。但我不认为有可能手动构建接口...