我有一个头文件COM接口。我创建了一个小型的win32程序,但我的主程序是用C#编写的。将COM对象添加到托管代码
所以我想在我的主程序中导入这个COM对象,但是我怎么做到这一点,当我唯一得到的是头文件?
我看过的所有地方我需要一个tlb文件..?
我是新来的COM对象,所以只是问,如果你需要一些额外的信息,或者有其他的解决办法:)
[更新] 首先对所有的答复感谢! 我试过一些不同的东西,但还没有解决我的问题。在我的研究中,我发现了一篇描述COM Interop的文章http://msdn.microsoft.com/en-us/library/aa645736(v=vs.71).aspx#vcwlkcominteroppart1cclienttutorialanchor2
这并没有帮助我。但我发现,我应该能够得到运动,如果我能完成以下步骤:
声明一个COM组件类:
[ComImport, Guid("7C075F7F-FD71-40a2-AC63-0D0C4DB39ECA")] class CCamera { // Cannot have any members here // NOTE that the C# compiler will add a default constructor // for you (no parameters). }
创建COM类包装:
[Guid("AD87369B-3BBA-4f1c-81C5-B92FCEA9A1F4"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface ICamera { //static HRESULT GetCameraInterface(); bool StartPreview(); bool StopPreview(); }
- 使用Casts代替QueryInterface:
尝试 CCamera cam = new CCamera(); ICamera测试=(ICamera)cam; //test.StartPreview(); (例外e) { } Console.WriteLine(e.StackTrace); }
我得到一个无效转换异常,所以这是因为我错过实现在该界面的方法呢? ,如何实现从C++接口下面的方法:
static HRESULT GetCameraInterface(void __RPC_FAR *__RPC_FAR *ppvObject);
[解决方法] OK我有一个解决方案,但我从来没有解决包的接口。 相反,我创建了一个C++ dll项目并公开了我需要的方法。然后在我的C#项目中,我可以使用这些方法与DllImport。如果有人需要更多关于我如何存档的解释,请给我留言。
是的,它是我可以读,但我发展到Windows CE,我认为这只是那里注册?请忍受我在这里深水。 – DNRN 2012-02-22 15:39:16
你有COM对象的DLL的?如果是这样,也许你可以运行“Regsvr32.exe的YourComLibrary.dll”进行注册。 – Botz3000 2012-02-22 15:42:40
我没有DLL :( – DNRN 2012-02-22 15:49:07