2012-04-24 64 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