Tag: idl

如何将常量与C#中的接口相关联?

有些语言允许您将常量与接口相关联: 一个Java示例 一个PhP的例子 W3C抽象接口也是如此,例如: // Introduced in DOM Level 2: interface CSSValue { // UnitTypes const unsigned short CSS_INHERIT = 0; const unsigned short CSS_PRIMITIVE_VALUE = 1; const unsigned short CSS_VALUE_LIST = 2; const unsigned short CSS_CUSTOM = 3; attribute DOMString cssText; attribute unsigned short cssValueType; }; 我想定义这个接口,以便可以从C#调用它。 显然,C#无法定义与接口关联的常量。 将此类接口转换为C#的常用方法是什么? 是否有任何针对DOM接口的“规范”C#绑定? 虽然C#不能,是否有另一种.NET语言可以定义与接口相关的常量?

如何在idl中声明一个IStream,以便visual studio将其映射到swinterop.comtypes?

我有一个COM对象需要从C#客户端获取流并处理它。 看来我应该使用IStream。 所以我写下我的idl。 然后我使用MIDL编译为tlb,编译我的解决方案,注册它,然后将我的库的引用添加到C#项目。 Visual Studio在我自己的库中创建一个IStream定义。 如何阻止它这样做,让它使用COMTypes IStream? 似乎有3个答案之一:添加一些导入 到idl所以它不会重新声明IStream(导入MSCOREE会这样做,但不能解决C#问题) 在视觉工作室中以某种方式混淆IStream – 但我不知道如何做到这一点。 我的所有想法都是完全错误的,我根本不应该使用IStream 帮助…谢谢 [ uuid(3AC11584-7F6A-493A-9C90-588560DF8769), version(1.0), ] library TestLibrary { importlib(“stdole2.tlb”); [ uuid(09FF25EC-6A21-423B-A5FD-BCB691F93C0C), version(1.0), helpstring(“Just for testing”), dual, nonextensible, oleautomation ] interface ITest: IDispatch { [id(0x00000006),helpstring(“Testing stream”)] HRESULT _stdcall LoadFromStream([in] IStream * stream, [out, retval] IMyTest ** ResultValue); }; [ uuid(CC2864E4-55BA-4057-8687-29153BE3E046), noncreatable, version(1.0) […]

C# – 编写COM服务器 – 映射到方法的属性

我们正在尝试替换最初为VB6应用程序编写的COM服务器 我们无法访问源代码。 出于某种原因,VB6应用程序可以调用我们的构造函数,但它得到: 系统错误&H80004002。 没有这样的接口支持。 我假设它试图获取QueryInterface的接口。 我们通过regasm / tlb和gacutil正确发送了我们的程序集,但后来我发现了一些奇怪的东西。 我打开了为程序集生成的.tlb文件regasm,并注意到我界面上的所有属性都显示为方法。 这是.Net工具正在做什么吗? 这会导致我的问题吗? 以下是原始文件的完整tlb定义: // Generated .IDL file (by the OLE/COM Object Viewer) // // typelib filename: UtopiaKeyboard.tlb [ uuid(9B4E1840-FF65-11CF-AA2E-0020AFA49D5A), version(1.0), helpstring(“OPOS POSKeyboard OLE Control”) ] library POSKEYBOARDLib { // TLib : // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046} importlib(“STDOLE2.TLB”); // Forward declare all types defined […]

将类似索引器的属性暴露给COM

我有现有的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 […]

如何在C#和C ++代码之间共享常量?

我正在编写两个进程,一个使用C#和WCF,另一个使用C ++和WWSAPI。 我希望能够在一个地方定义用于两者之间通信的地址,并让C#和C ++都使用它。 这可能吗? 我最接近的是在IDL中定义常量,然后使用MIDL和TLBIMP将其转换为可由C#使用的DLL。 然而,这似乎没有暴露常数,或者至少我无法弄清楚如何使它这样做。 也许它仅限于类型定义。 还有其他建议吗?

将接口IDL文件转换为C#

我有一个IDL文件中定义的接口,我想在C#中使用。 有没有办法将IDL转换为C#中可用的东西?