簡體   English   中英

如何在Visual Studio 2012中創建HelloWorld COM互操作

[英]How to create a HelloWorld COM Interop in Visual Studio 2012

首先,我是COM新手,目前很困惑。 我已經在MSDN和常規Web上閱讀了很多有關COM的文檔,但其中很多似乎已經過時且過於復雜。

我認為這是使其正常工作所必需的。 還沒有,所以我確定我會丟失一些東西,但是通過提供食譜,希望有人能發現問題:

  1. 創建一個C#控制台應用程序項目。 我將其命名為CSharpApp
  2. 創建一個C ++ ATL項目。 我稱它為ComLib.Interop。
    • 添加類(模板:ATL簡單對象),我稱之為“ InteropDemo”
    • 在類視圖中,右鍵單擊IInteropDemo並添加方法HelloWorld。
  3. (已刪除,保留此編號以保持正確的答案。)
  4. 編譯。
  5. 將對ComLib.Interop.dll的引用添加到CSharpApp。
    • 在已編譯的COM dll上調用regsrv32.exe,然后在“添加引用...”的“ COM”選項卡中選擇DLL。
  6. 在Program.cs的Main中,創建一個InteropDemo類並調用HelloWorld。
  7. 利潤。

多虧了答案,我更新了問題以反映組合的解決方案。

請嘗試執行以下步驟:

  1. 確保兩個項目(非托管C ++和托管C#)具有相同的位數,即x86或x64。 為了清楚起見,假設它是x86。
  2. 打開管理命令提示符並注冊您的COM DLL: C:\\Windows\\SysWOW64\\regsvr32.exe c:\\full-path\\ComLib.Interop.dll
  3. Admin身份運行Visual Studio。 執行步驟1,2,4,5,6。 不要做3。

看看是否達到7。我認為應該可以。

請注意,您只需要在開發機器上注冊。 孤立的COM應該在其他任何地方都可以工作。

鑒於沒有出現構建錯誤,您可能在步驟2上出錯了。 向導給你添加的那種類的多個選項。 默認選擇是“ C ++類”,您需要選擇ATL +“ ATL簡單對象”。

現在,“類視圖”窗口顯示添加的兩種類型,即IInteropDemo接口和實現該接口的CInteropDemo類。 接下來,右鍵單擊接口類型(而不是類),然后使用“添加方法”。 現在,您還可以查看項目中的IDL文件,該文件應類似於以下內容:

import "oaidl.idl";
import "ocidl.idl";

[
    object,
    uuid(CBA0D899-2F4C-4F1D-A935-C80CB981C153),
    dual,
    nonextensible,
    pointer_default(unique)
]
interface IInteropDemo : IDispatch{
    [id(1)] HRESULT Method();
};
[
    uuid(ED14ACED-4FF9-4144-B302-CC48C481F28B),
    version(1.0),
]
library ATLProject4Lib
{
    importlib("stdole2.tlb");
    [
        uuid(8543642F-9927-451C-9784-6A7774418299)      
    ]
    coclass InteropDemo
    {
        [default] interface IInteropDemo;
    };
};

足以構建它。 UAC在任何現代Windows版本上都應該失敗,因此會阻止COM服務器注冊。 這需要步驟#0:右鍵單擊快捷方式,然后選擇“以管理員身份運行”,以啟動Visual Studio。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM