首先,

使用 清楚的 C++,没有ATL,MFC尝试使用COM Object接口。

使用 奥莱维尤 (OLE/COM 对象查看器)- 用于设计 IDL 代码。

在此阶段,使用 中度语言 编译器,现在我在尝试生成以下内容时遇到问题:

cmd 行语法:

midl /nologo /env win32 /tlb ".\S8_.tlb" /h ".\S8_.h" /iid ".\S8_i.c" S8.idl

  • 相应的.TLB(类型库)
  • A.H(标头)
  • IID 定义包含文件 (*_i.c)
  • 代理 (*_p.c)

MIDL 编译器错误:

S8.IDL(513) :错误 MIDL2025:语法错误:期待“S8SimObject”附近的类型规范

    HRESULT LinkSimObjects(
                    [in] S8SimObject* SourceObject, ####line 513 ####
                    [in] S8SimObject* DestObject,
                    [in] float TravelTime);
有帮助吗?

解决方案 2

MIDL 编译器错误

S8.IDL(513) : 错误 MIDL2025 :语法错误:期待接近的类型规范 “S8Sim对象”

解决了

添加一个 前向声明 - 在 IDL 文件的顶部:

  • 导入“ocidl.idl”;
  • 接口S8SimObject;

其他提示

好吧,我不太明白你的问题,但以下内容应该有所帮助:

  • 公共枚举定义需要有自己的 uuid 真正公开。
  • 我已经看到这些枚举定义不会进入类型库,除非它们实际在某些接口方法中使用。我不知道这样做的原因,可能我错过了一些简单的事情(比如将该枚举添加到库块中,或者其他什么)。
  • short 通常表示短整数,而不是单精度浮点数。
  • 相当于 floatsingle 在VB中,但正如我在你的其他问题中看到的那样,我怀疑你实际上是指替换 singlefloat.

顺便说一句,我建议发布一个最小的(可编译的)IDL 文件(删除了大多数定义),它或多或少类似于您要编译的文件。这有助于避免一些混乱,例如您正在使用 IS8Simulation 在你的文字中,但是 S8SimObject 在您复制的 IDL 片段中。如果您指定预期的结果和意外的(对您来说)错误也会有所帮助。

编辑

好吧,您现在插入的这个编译错误很简单: S8SimObject 没有定义。您需要始终在方法声明中引用接口(IS8Simulation),永远不要到实现该接口的组件类。

正如您所说,您要在此处更改现有的 IDL 文件:基本目标是什么?如果原始 IDL 文件始终使用 S8SimObject, ,也许唯一的问题是定义 S8SimObject 没有包含在 IDL 文件的顶部吗?如果您有类型库定义 S8SimObject 周围,​​可以使用OleView导出该界面的IDL。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top