问题:从C+调用C#unmanaged COM+;MFC 我使用Nistun> COM< >强连接>将一个C++项目链接到一个使用TLB文件的MFC C++项目。该程序在主PC(我编译代码的地方)中正确运行。但当我在另一台计算机上运行该程序时(使用相同的操作系统,即Win 10),运行库错误发生
C#代码问题:从C+调用C#unmanaged COM+;MFC 我使用Nistun> COM< >强连接>将一个C++项目链接到一个使用TLB文件的MFC C++项目。该程序在主PC(我编译代码的地方)中正确运行。但当我在另一台计算机上运行该程序时(使用相同的操作系统,即Win 10),运行库错误发生,c#,c++,visual-c++,mfc,unmanaged,C#,C++,Visual C++,Mfc,Unmanaged,C#代码 命名空间CSharp非托管 { 公共接口IGlobalInfo { 空乘(); 整数和(整数a,整数b); 双叠加(整数x,整数y); } 公共类GlobalInfo:IGlobalInfo { 公共空间 { int c=4*5; System.IO.File.writealText(“D:\\test.txt”,c.ToString()); Debug.WriteLine(“MultiPly:+c.ToString()); } 公共整数和(整数a,整数b) { 返回a+b; } }
命名空间CSharp非托管
{
公共接口IGlobalInfo
{
空乘();
整数和(整数a,整数b);
双叠加(整数x,整数y);
}
公共类GlobalInfo:IGlobalInfo
{
公共空间
{
int c=4*5;
System.IO.File.writealText(“D:\\test.txt”,c.ToString());
Debug.WriteLine(“MultiPly:+c.ToString());
}
公共整数和(整数a,整数b)
{
返回a+b;
}
}
}
C++MFC代码
#仅导入名为_guidsraw_interfaces _的“CSharpUnmanaged.tlb”
int main(){
HRESULT hr=共同初始化(0);
CreateInstance(uuuidof(CSharpUnmanaged::globalInfo));
coninitialize();
如果(globalInfo==NULL)AfxMessageBox(L“NULL”);
globalInfo->multiPly();
}
我试图跟踪错误,我确信问题与globalInfo有关,该globalInfo在运行程序期间保持为空。
感谢@SantoshDhanawade 在目标计算机上,此脚本必须运行:
RegAsm.exe -tlb -codebase yourdll.dll
注意:以管理员身份运行命令提示符
此脚本创建一个tlb文件,必须替换为原始tlb文件
干杯…有一个调用是注册GUID为的com组件。您是否已在另一台计算机上注册?为什么在调用该方法之前要调用
coninitialize
?是否在目标计算机上安装MFC运行时?您是否在目标上安装了框架?您是否在目标计算机上将.NET库注册为COM?@SantoshDhanawade如何在另一台计算机上注册它?@Selvin.NET framework和MFC runtime安装在目标计算机上。另外,.Net库注册为COM.RegAsm.exe-tlb-codebase yourdll.dll