gpt4 book ai didi

.net - 通过导入的类型库访问 COM-dll 失败

转载 作者:行者123 更新时间:2023-12-03 15:58:18 25 4
gpt4 key购买 nike

我正在尝试使用 .NET COM-dll,它是步进电机控制接口(interface) SDK 的一部分。 SDK 提供了一个类型库,我通过“导入组件 > 导入类型库”将其导入到 Delphi 中。

虽然我了解一些有关 COM 编程的基础知识,但我很难让界面正常工作。问题似乎是 CoClass 以及 OLE 服务器代理仅公开一个空接口(interface),即没有任何方法的接口(interface) (_ComMotorCommands)。从那里转换为实际的IComMotorCommands会产生接口(interface)不支持错误。

// *********************************************************************//
// Interface: IComMotorCommands
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {0D4E3A3F-0C07-438B-9F6F-CC1968408CFC}
// *********************************************************************//
IComMotorCommands = interface(IDispatch)
['{0D4E3A3F-0C07-438B-9F6F-CC1968408CFC}']
function Get_ErrorFlag: WordBool; safecall;
function Get_ErrorMessageString: WideString; safecall;
function Get_ErrorNumber: Integer; safecall;
...
end;

...

// *********************************************************************//
// Interface: _ComMotorCommands
// Flags: (4432) Hidden Dual OleAutomation Dispatchable
// GUID: {5AB3EB9E-E847-3133-95DC-4DDC7870C02A}
// *********************************************************************//
_ComMotorCommands = interface(IDispatch)
['{5AB3EB9E-E847-3133-95DC-4DDC7870C02A}']
end;

...

CoComMotorCommands = class
class function Create: _ComMotorCommands;
class function CreateRemote(const MachineName: string): _ComMotorCommands;
end;

我还尝试通过手动创建界面

CreateComObject(CLASS_ComMotorCommands) as IComMotorCommandsDisp

它本身不会抛出异常。甚至设置一些连接属性(例如端口和波特率)似乎也有效。但是当我尝试查询电机状态时,我得到了

'BadImageFormatException:尝试加载格式不正确的程序。 (HRESULT 异常:0x8007000B)'

请注意,不是作为我的应用程序中的异常,而是通过接口(interface)本身的错误报告机制 (Get_ErrorMessageString)。

此错误通常表示 x86 和 x64 代码之间存在位冲突。但我的平台目标是x86,SDK也是如此。我在 Windows 7 x64 上运行 Delphi XE3,但在我尝试过的 32 位机器上也出现了相同的错误,这对我来说没有任何意义。

该 SDK 还提供了几个针对 VB、C++ 和 C# 的 Visual Studio 示例。但它们都使用 Visual Studio 方式调用接口(interface),对我没有任何帮助。 (在这里您可以直接引用TLB,只需声明一个“ComMotorCommands”类型的变量,然后就可以自由访问所有接口(interface)方法。)

我将根据要求通过电子邮件提供完整文件。

我对此感到困惑,因此我们将不胜感激!

最佳答案

问题很可能是尝试加载 64 位模块。在配置文件模式下使用 Dependency Walker 进行调试。

关于.net - 通过导入的类型库访问 COM-dll 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13859100/

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