我知道我错过了一些简单的东西,我几乎没有这些东西的经验.
我想在idl的接口中执行此操作
[id(5), helpstring("Returns true if the object is in a valid state.")]
HRESULT IsValid([out, retval] boolean bValid);
Run Code Online (Sandbox Code Playgroud)
但是这给出了:[out]参数不是指针.
好的,我明白了.
但是,在执行此操作的C#代码中,我无法从方法IsValid()返回bool*,因为它不安全.
我返回布尔值的正确方法是什么?
我在多语言环境中工作,并使用Vim + ctags来导航代码.但是我们也使用CORBA和旺盛的ctags不解析IDL文件.
有没有人知道IDL的ctags兼容标签生成器?
例如,DOM规范具有各种IDL定义,其中一个是接口节点.您如何将这个 - 甚至是其中的一部分 - 转换为实际的C#?我的意思是,你甚至会在哪里开始?据我所知,C#的接口行为与IDL在此处调用接口的行为大相径庭.我错了吗?
interface Node {
// NodeType
const unsigned short ELEMENT_NODE = 1;
const unsigned short ATTRIBUTE_NODE = 2;
const unsigned short TEXT_NODE = 3;
const unsigned short CDATA_SECTION_NODE = 4;
const unsigned short ENTITY_REFERENCE_NODE = 5;
const unsigned short ENTITY_NODE = 6;
const unsigned short PROCESSING_INSTRUCTION_NODE = 7;
const unsigned short COMMENT_NODE = 8;
const unsigned short DOCUMENT_NODE = 9;
const unsigned short DOCUMENT_TYPE_NODE = 10;
const unsigned short DOCUMENT_FRAGMENT_NODE …Run Code Online (Sandbox Code Playgroud) 对于WinRT,IDL现在支持如下构造:
[marshaling_behavior(agile)]
[threading(both)]
[activatable(0x06020000)]
[version(0x06020000)]
[static(Windows.Networking.Sockets.IDatagramSocketStatics, 0x06020000)]
runtimeclass DatagramSocket
{
[default] interface Windows.Networking.Sockets.IDatagramSocket;
interface Windows.Foundation.IClosable;
}
Run Code Online (Sandbox Code Playgroud)
我对这个static属性感到好奇.这是什么意思?它如何与主体内部列出的接口相关runtimeclass?
我正在将一些代码从 IDL 移到 python 中。一个 IDL 调用是 INT_TABULATE,它在固定范围内执行积分。
INT_TABULATED 函数使用五点 Newton-Cotes 积分公式对闭区间 [MIN(x) , MAX(x)] 上的一组表格数据 { xi , fi } 进行积分。
Result = INT_TABULATED( X, F [, /DOUBLE] [, /SORT] )
结果是曲线下的面积。
我的问题是,Numpy/SciPy 是否提供了类似的集成形式?我看到它[scipy.integrate.newton_cotes]存在,但它似乎返回“牛顿-科特斯积分而不是面积的权重和误差系数”。
我和被称为COM Interop的野兽长期相遇...
我目前正在尝试从OLE/COM对象查看器生成的.idl文件生成.tlb.但是,当尝试运行Midl.exe来编译它时,我收到一个错误:
.\Sim.API.IDL(236) : error MIDL2025 : syntax error : expecting a type s
pecification near "ImportFileStatus"
Run Code Online (Sandbox Code Playgroud)
我的.idl文件超过1000行,所以我不特别想在这里发帖,我相信感兴趣的部分是:
typedef [uuid(980B172E-19C1-389A-BB74-29A54737C5B4), version(1.0) ,
custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "Sim.API.ImportFileResult")
]
struct tagImportFileResult {
ImportFileStatus _status;
LPSTR _message;
} ImportFileResult;
Run Code Online (Sandbox Code Playgroud)
然后几行......
typedef [uuid(A4B9A0FF-A2D4-3EC5-AB7E-69311B9122C8), version(1.0) ,
custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "Sim.API.ImportFileStatus")
]
enum {
ImportFileStatus_Success = 0,
ImportFileStatus_VersionMismatch = 1,
ImportFileStatus_Failure = 2
} ImportFileStatus;
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,应该尊重这些以修复类型规范错误.但是,如果我这样做,我会遇到一个新问题.
midl\oleaut32.dll : warning MIDL2368 : error generating type library, ignored :
Could not set UUID : tagImportFileResult (0x800288C6)
Run Code Online (Sandbox Code Playgroud)
我对idl格式非常不熟悉,并且使用midl.exe,也许我正在做的事情有些明显错误?
一如既往的任何帮助将不胜感激:)
我有现有的COM接口.我不想创建一个将新接口公开为COM(带有新GUID)的.net程序集,但接口的结构必须相同.
如何创建一个公开此接口的.net类(C#)?
[
odl,
uuid(1ED4C594-DDD7-402F-90DE-7F85D65560C4),
hidden,
oleautomation
]
interface _IFlashPhase : IUnknown {
[propget]
HRESULT _stdcall ComponentName(
[in] short i,
[out, retval] BSTR* pVal);
[propput]
HRESULT _stdcall ComponentName(
[in] short i,
[in] BSTR pVal);
[propget]
HRESULT _stdcall ComponentMolePercent(
[in] short i,
[out, retval] double* pVal);
[propput]
HRESULT _stdcall ComponentMolePercent(
[in] short i,
[in] double pVal);
[propget]
HRESULT _stdcall ComponentFugacity(
[in] short i,
[out, retval] double* pVal);
[propput]
HRESULT _stdcall ComponentFugacity(
[in] short i,
[in] double pVal);
};
Run Code Online (Sandbox Code Playgroud) 在Visual Studio 2012附带的MS IDL版本中,对WinRT的支持添加了以下构造:
[activatable(Windows.Networking.Sockets.IControlChannelTriggerFactory,
0x06020000)]
[threading(mta)]
[marshaling_behavior(agile)]
[version(0x06020000)]
runtimeclass ControlChannelTrigger
{
[default] interface Windows.Networking.Sockets.IControlChannelTrigger;
interface Windows.Foundation.IClosable;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用IMetaDataImport来分析winmd文件中的所有类型.如何找出"运行时类"实现的接口以及默认接口的接口?
我在 Avro IDL 中尝试了以下代码,该代码引用了逻辑类型时间戳毫秒,但它不起作用。
在 Avro IDL 中使用逻辑类型是否需要导入?或者逻辑类型不可用,我需要使用原始类型(在本例中为 long)?
protocol test {
record test {
timestamp-millis time;
}
}
Run Code Online (Sandbox Code Playgroud)
结果是:
Exception in thread "main" org.apache.avro.compiler.idl.ParseException: Undefined name 'timestamp', at line 3, column 9
Run Code Online (Sandbox Code Playgroud)
这当然有效:
protocol test {
record test {
long time;
}
}
Run Code Online (Sandbox Code Playgroud) 当我在客户端调用方法时,对于分布式引用对象,出现以下消息错误:
Exception in thread "main" org.omg.CORBA.BAD_OPERATION:
at org.omg.CORBA.portable.ObjectImpl._get_delegate(ObjectImpl.java:18)
at org.omg.CORBA.portable.ObjectImpl._is_local(ObjectImpl.java:130)
at fr.esiag.commun._ManageDemandStub.createDemand(_ManageDemandStub.java
:28)
at fr.esiag.commun.resource.MyInvocationHandler.invoke(MyInvocationHandl
er.java:29)
at com.sun.proxy.$Proxy0.createDemand(Unknown Source)
at org.TD.TransactionDriver.main(TransactionDriver.java:55)
Run Code Online (Sandbox Code Playgroud)
有人能告诉我这是什么意思吗?