有个项目,实施的时候需要用vb根据现场的不同重新编译一个com组件GetData.dll。这个com组件要转换成。net程序集的方式被其他。net程序调用。
问题出现在这里:
如果我用tlbimp.exe GetData.dll /out:Interop.GetData.dll重新生成的dll会报错。
而用visual studio express IDE新建一个工程然后添加引用的方式加入,让IDE自动生成com组件的.net程序集,这样产生的Interop.GetData.dll却不报错。
为什么啊。
问题出现在这里:
如果我用tlbimp.exe GetData.dll /out:Interop.GetData.dll重新生成的dll会报错。
而用visual studio express IDE新建一个工程然后添加引用的方式加入,让IDE自动生成com组件的.net程序集,这样产生的Interop.GetData.dll却不报错。
为什么啊。
你可以这样,将tlbimp.exe改名成tlbimp1.exe。
然后编写一个小程序,叫tlbimp.exe,它将传入的参数保存下来(从Main()的args里面得到),然后调用tlbimp1.exe(Process.Start()),传入对应的参数。然后看看这个程序能拦截出IDE怎么调用的。
除了微软的,你都需要带到部署机器上,然后全部注册,tlbimp这样。
问题是我vb做的dll引用了第三方库。而这导致了用tlbimp生成的inerop不能使用,而用IDE生成的可以。
另一个实验是用vb作的dll不涉及引用第三方库,如此用tlbimp生成inerop和用IDE生成的都可以用。
谢谢,这我也看到过,但是IDE使用的也是用tlbimp生成的呀,这很奇怪啊。这句话是要求不用tlbimp来生成了。