【发布时间】:2021-03-19 16:34:38
【问题描述】:
我几乎没有尝试在 QT 上使用基于 .NET 的 Laser Control dll 文件。 我在服务器上注册了 dll 文件,制作了 tlb 文件,并使用命令导入了它
#import "Litron.Control.CWLasers.tlb" no_namespace named_guids
之后,我使用了这个命令
struct cwDiodeLaserPIV;
cwDiodeLaserPIV Laser=NULL;
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_cwDiodeLaserPIV, NULL, CLSCTX_INPROC_SERVER, IID__cwDiodeLaserPIV, reinterpret_cast<void*>(&Laser));
*我也添加了 ActiveQT 头文件来使用 CoCreateInstance
当我检查此代码是否适用于此时,
if(SUCCEEDED(hr))
{ qDebug()<<"Calling dll is succeded"; }
else
{ qDebug()<<"Calling dll is failed"; }
“调用dll失败”出来了。 但是,当我在 Visual Studio C++ 中使用相同的代码时,会出现“调用 dll 成功”。 而且,即使调用dll成功了,我也无法在VS调用dll的函数。
这里有一些问题。
我使用了 struct cwDiodeLaserPIV。因为在 tlh 文件中,cwDiodeLaserPIV 是用 struct 命令声明的。 但实际上,当我看到 dll 的内部部分时,cwDiodeLaserPIV 是用 class 命令声明的。 为什么会这样?我可以将它与结构声明一起使用吗?
当我在QT,CLSID_和IID_部分写代码时,没有自动连接的目录。 另一方面,在VS处,VS会自动找到CLSID_cwDiodeLaserPIV和IID__cwDiodeLaserPIV 再说一遍,在 QT,当我写下 CLSID_ 或 IID_ 时,在自动连接的目录列表中找不到 CLSID_cwDiodeLaserPIV 和 IID__cwDiodeLaserPIV。为什么会这样?我不能在 QT 使用这种方式吗?
++ 我参考了https://forum.qt.io/topic/108642/how-to-include-a-com-tlb-library-in-my-c-project/2 并使用dumpcpp 制作了cpp 和头文件。但是里面好像没有足够的功能。
我是 QT 和编程方面的专家。因此,示例代码将非常有帮助 非常感谢...
【问题讨论】: