2012-04-24 62 views
0

我有一個需要調用C#dll的C++函數。 C++函數只是將值發送到C#dll函數。 C#dll使用這些值生成一些文件,然後完成。非託管C++在生成或不生成COM時使用自動註冊來調用C#dll?

我的問題是,當使用COM時,我需要每次使用不同的計算機時註冊該DLL。 那麼,有沒有什麼辦法可以註冊該dll文件並生成一個.tlb文件?

複製$(TARGETPATH)$(TARGETDIR)C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ RegAsm.exe $(TARGETPATH)/代碼庫CReportGenerationDLL.dll /tlb:CReportGenerationDLL.tlb

這是我已經試過了,但它不會工作。我得到的代碼退出9009

// Pewdut

回答

4

如果你的意思是每次都自動註冊COM對象時建設您的其他應用程序comapputer,那麼答案是(假設你正在使用VS2010進行構建): 轉到項目/屬性/生成事件,並添加到「生成後事件命令行」 以下行:

regasm <path to your COM .dll> 

如果你的意思是,在每次註冊自動將您的COM對象時運行您在另一個compputer應用程序,那麼你可以創建一個批處理文件,它包含:

regasm <path to your COM .dll> 
<path to your application>app.exe" 

或者只是使用ShellExecute函數調用regasm.exe從您的應用程序。

您可能想要添加/ s開關以使註冊保持沉默。

錯誤9009說,你對regasm道路是錯誤的,看到here

複製$(TARGETPATH)$(TARGETDIR)是出來的地方,你爲什麼需要這個,什麼是你想達到什麼目的?

+0

複製$(TARGETPATH)$(TARGETDIR) C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ RegAsm.exe $(TARGETPATH)/代碼庫CReportGenerationDLL.dll /tlb:CReportGenerationDLL.tlb 這是我曾嘗試過,但它不會工作..我不認爲regsvr32是正確的在這種情況下,對不起,如果我描述我的問題不好。 – Pewdut 2012-04-24 15:05:52