标签: idl

什么是oaidl.idl和ocidl.idl?

默认的ATL Simple Object在其IDL文件的顶部有以下内容:

import "oaidl.idl";
import "ocidl.idl";
Run Code Online (Sandbox Code Playgroud)

这些文件是什么,以及我如何知道何时需要导入它们?是否有任何文档描述这两个文件中定义的内容?我不知道"oa"和"oc"代表什么,文件本身没有有用的评论.

idl atl

9
推荐指数
1
解决办法
6708
查看次数

COM IDL定义中[in,out]和[out,retval]之间的差异

在我工作的一些IDL中,我注意到在方法中有两种用于标记返回值的约定 - [in, out][out, retval].

似乎[in, out]在有多个返回值时使用,例如:

HRESULT MyMethod(
    [in] long InputParam, 
    [in, out] long* OutputParam1, 
    [in, out] long* OutputParam2
);
Run Code Online (Sandbox Code Playgroud)

似乎[out, retval]只有一个返回值时使用,例如:

HRESULT MyMethod2(
    [in] long InputParam, 
    [out, retval] long* OutputParam1
);
Run Code Online (Sandbox Code Playgroud)

这是一个COM IDL约定还是我正在使用的代码中的约定?

从2个符号生成的代码是否存在功能差异,或者它们是否完全可互换?

com idl notation

8
推荐指数
1
解决办法
1万
查看次数

IDL枚举未显示在类型库中

我有一个使用MS ATL库编写的COM对象.我在IDL中声明了一堆枚举,但在使用MS COM对象查看器工具查看类型库时它们不会出现.问题似乎是缺少的枚举实际上并没有被任何COM方法用作参数 - 我如何强制这些枚举出现?

例如,在IDL中:

// Used by Foo method, so appears in the type library
typedef enum FOO
{
    FOO_1,
    FOO_2,
} FOO;

// Not used by any method, so won't appear in the type library
typedef enum BAR
{
    BAR_1,
    BAR_2,
} BAR;

[id(1)] HRESULT Foo([in] FOO eFoo);
Run Code Online (Sandbox Code Playgroud)

即使所讨论的枚举没有被任何方法直接使用,它们对使用该对象的任何人仍然有用,但我不能让它们导出.

谁看过这个吗?

com idl

7
推荐指数
1
解决办法
4457
查看次数

Notepad ++ IDL语法突出显示?

我正要为Notepad ++创建一个用户定义的语言文件,以语法高亮IDL.但是在我去创建一个之前,我想与"社区"核实,看看是否有其他人已经准备好了.

有没有人有什么建议?

idl syntax-highlighting notepad++ idl-programming-language

7
推荐指数
1
解决办法
7501
查看次数

如何在命令行中从.NET程序集中获取IDL(或如何将TLB转换为IDL)?

我们有一个.NET程序集(实际上是Aspose.Words),我们希望客户端可以毫不费力地从COM客户端使用它.

  1. 因此我们使用程序集发送.TLB,以便客户端可以从C++或Delphi等语言中使用它,并且不需要自己提取.TLB.

  2. 我们还使用程序集发送.IDL,以便客户端可以查看它,如果他们想要查看枚举值(如果他们在ASP中编程).

  3. 我希望.TLB和.IDL由构建脚本生成.我可以生成.TLB没问题.但我无法在命令行中生成.IDL(或作为替代转换.TLB到.IDL).我使用OLEVIEW.EXE手动执行此操作,这不是很好.

听说Delphi的TLIBIMP.EXE听起来像它可以做到这一点,但它似乎没有单独提供.

所以问题是:

  1. 从上面的任何东西听起来都很愚蠢?

  2. 如何使用命令行从.NET程序集中获取.IDL.

谢谢.

.net idl typelib

7
推荐指数
2
解决办法
4757
查看次数

如何将.tlb文件转换为标题和实现文件?

我正在尝试转换mscorlib.tlb.它通常在C++中使用,如下所示:

#import "mscorlib.tlb" raw_interfaces_only              \
     high_property_prefixes("_get","_put","_putref")        \
     rename("ReportEvent", "InteropServices_ReportEvent")
Run Code Online (Sandbox Code Playgroud)

如何将其转换为标题和实现文件?

我能够使用Visual Studio编译包含上面行的虚拟cpp文件,并生成一个.tlh文件.不应该有实施文件吗?

com idl typelib clr-hosting mscorlib

7
推荐指数
1
解决办法
6579
查看次数

从IDL生成java(避免默认包)

我正在使用大型遗留C++代码库,其中包含许多IDL文件,这些文件具有在任何模块之外声明的所有类型和常量.

对于C++,这会导致代码生成到全局命名空间 - 丑陋但可以接受.

现在我正在尝试添加Java客户端以通过CORBA进行连接.但是,对于Java,从IDL生成的类型(使用适用于java的Sun/Oracle IDL编译器:idlj)位于java 默认包中,因为它们不在IDL模块中.这会导致Java编译错误,因为从默认包导入是非法的.

我正在寻找解决问题的最简单方法.

我考虑过以下几点:

  1. 在所有类型周围放置一个模块声明.我目前正在使用这个解决方案,但根据受影响的类型数量以及对大型遗留C++代码库的影响,这非常痛苦.
  2. 使用-pkgPrefix或-pkgTranslate选项.到目前为止,我无法弄清楚如何做到一般这个,因为你必须指定一个模块翻译来自或指定类型添加前缀.-pkgPrefix可以用于特定类型,但我们有数百种类型,我宁愿不为每个编译文件专门列出-pkgPrefix选项...
  3. 使用pragma指令?我不知道有人可以使用,但希望大师可以指明方向?
  4. ????

我发现如果没有包含所有类型的现有模块,很难相信没有简单的方法强制IDL在Java包中.我希望我只是错过了显而易见的事!

编辑:

  • IDL-to-Java编译器是idlj.
  • 添加了以下示例.
  • 更新了项目#2(上面),以澄清为每种类型使用-pkgPrefix是不可行的(除非它可以合理地编写脚本?)

例:


Foo.idl

struct Foo
{
  .
  .
  .
}
Run Code Online (Sandbox Code Playgroud)

Foo.java :( 注意没有指定包,这意味着默认包):

public final class Foo implements org.omg.CORBA.portable.IDLEntity
{
  .
  .
  .
}
Run Code Online (Sandbox Code Playgroud)

ClassUsesFoo.java:

package com.sigh;

import Foo;  // <-- this is an error
public class ClassUsesFoo
{
     private Foo f;
};
Run Code Online (Sandbox Code Playgroud)

java corba idl

7
推荐指数
1
解决办法
1819
查看次数

C结构(C++ POD)和谷歌protobufs之间的转换?

我的代码目前传递了很多(有时是嵌套的)C(或C++ Plain Old Data)结构和数组.

我想将这些转换为谷歌protobufs.我可以手动编写在这两种格式之间进行转换的代码,但是自动生成此类代码的错误会更少.做这个的最好方式是什么?(在具有足够内省的语言中迭代成员变量的名称会很容易,但这是我们正在讨论的C++代码)

我正在考虑的一件事是编写解析C结构的python代码,然后吐出一个.proto文件,以及为所有类型从成员复制到成员(在任一方向上)的C代码,但也许有一个更好的方式......或者可能有另一个已经可以生成的IDL:

  1. .h文件包含所有嵌套类型
  2. .proto文件包含等价物
  3. .c文件,其函数可复制.proto文件生成的C++结构和.h文件中定义的结构之间的任一方向

c c++ idl protocol-buffers data-structures

7
推荐指数
1
解决办法
2303
查看次数

xQuartz响应非常慢

我不确定每个IDL用户是否都会遇到这种情况,但在升级到macOS Sierra和xQuartz 2.7.11之后,我的IDL小部件的响应速度变得非常慢.我在Red Hat Enterprise Linux Workstation 6.6上运行相同的程序.它运作顺利.我曾经在升级之前使用相同的程序SSH到OS X Mavericks.通过适当的互联网连接,它也运行良好.不幸的是,我不记得我使用的是哪个版本的xQuartz.

我不认为这个问题与SSH有关.我试图用SSH和本地运行程序,响应率似乎非常相似.

我试图将我的xQuartz降级到2.7.9,问题没有解决.

我试着自己调试,所以我发现以下链接与我有类似的问题. https://bugs.freedesktop.org/show_bug.cgi?id=93430

现在可以加速响应的唯一方法是强制将输出设置为256色.但它打破了我程序中的所有颜色设置.

所有建议和问题都表示赞赏!

x11 idl xquartz macos-sierra

7
推荐指数
1
解决办法
2724
查看次数

缺少 Idlj 编译器 (Linux/JDK 11)

找不到编译.idl文件的idlj工具。检查/usr/bin/usr/lib/jvm/java-11-jdk。它不是和JDK捆绑在一起的吗?如何添加idlj编译器?

PS 我更喜欢Python,并且不经常使用Java。如果这是一个愚蠢的问题,我很抱歉。

java idl idlj java-11

6
推荐指数
1
解决办法
3758
查看次数