【问题标题】:C++ API DLL ProjectC++ API DLL 项目
【发布时间】:2012-10-26 04:39:06
【问题描述】:

我有一个 C++ 项目,它使用附带 DLL 和 LIB 文件以及头文件的 API。 我想创建一个 win32 表单项目。

我的问题是如何将项目与 dll 和 lib 文件链接。

但主要问题是,我如何订阅事件? 在 API 中,我可以调用函数,这些函数在事件响应中返回,在 MFC 项目中我通常会在消息循环中订阅。但是在Win32中没有消息循环。

也许我自己把情况复杂化了,这比我想象的要容易。 请为我澄清这种情况。

谢谢。

【问题讨论】:

  • 当您直接使用 Win32 API 时,由您来创建自己的消息循环。
  • 我该怎么做?以及如何确保从 API 调用的函数中获得“事件”响应?
  • 也许我应该备份:你是在这个程序中创建任何实际的窗口,还是控制台程序?
  • 杰瑞,我的错,我没有提到我打算使用win32表单项目。所以,是的,我想创建表单。
  • 您使用 winforms 而不是 WPF 的任何具体原因?我只是问,因为 winforms 的日子已经屈指可数了。 MS 寄希望于 WPF 的中期未来(但你可以指望他们改变,像往常一样)。

标签: c++ winforms api winapi dll


【解决方案1】:

当有人问多个问题时,总是很难回答...对于您的“主要问题”,请显示相关的 API 调用以订阅事件。 Win32中没有消息循环,你错了……只是没有MFC消息循环。

我现在正在回答一个简单的问题......“你如何链接 DLL”。我有点假设您使用的是 Visual Studio。那是对的吗?当我赶时间时,我这样做的方式是这样的:

#include "mylib.h"
#pragma comment(lib, "mylib.lib")

仅此而已。我当然想要头文件,但是当我这样做时,我告诉编译器也链接库。

我似乎记得其他时候我只是将库文件拖到项目的解决方案视图中,有效地将其添加为源。这也有效。

很长的路要走,编辑您的项目设置,转到 Linker 部分,然后在 Input 子部分下,将您的库添加到 Additional Dependencies 列表。您需要对所有配置执行此操作。有一些方法可以正确维护它,但我不会在这里讨论。

如果你没有使用 Visual Studio,请忽略我的回答。

【讨论】:

  • 向那个“快点”的方式欢呼!永远不要通读所有的编译指示。
  • 我正在使用 Visual Studio。函数调用的一个例子是: void SubScribL1Quotes( char * psymbol,BOOL bSubScrib);它的响应是: virtual int OnLv2Quote(st_L2Quote *pst);我该怎么做才能得到这个回复?谢谢。
  • 这很神秘......如果它使用 Windows 消息循环,我想至少需要一个HWND。你在忽略什么吗?例如,您可以在 API 中设置事件回调函数吗?或者,API 是否创建对象?我看到“响应”是一个虚函数。大概是你可以覆盖的东西......
  • 在 API 中它说: PreTranslateMessage(MSG* pMsg) 函数应该放在你的消息循环中。如果您使用的是 MFC,请将其放入您的 CWinApp::PreTranslateMessage() 函数中。我没有使用 MFC,但在 Win32 表单项目中没有看到任何 CWinApp 类...
【解决方案2】:

您不能将项目与 dll 文件链接,您可以将项目与 lib 文件链接,您可以在项目设置对话框(链接器)中添加 lib 文件名

或者,您将其添加到您的代码中

#pragma comment(lib,"xxxx.lib")

DLL 文件将在运行时加载。

关于消息循环,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms644928(v=vs.85).aspx

或者这个:http://msdn.microsoft.com/en-us/library/windows/desktop/ms644996(v=vs.85).aspx#modeless_box

【讨论】:

    猜你喜欢
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 2017-03-18
    相关资源
    最近更新 更多