我的项目使用c++层从其他平台访问.net com dll。首先我在.net 2.0版本中开发了com dll。一切正常。没有问题。我们使用regasm.exe注册了dll,然后它可以正常工作,然后我想将我的项目升级到.net 4.0。我用vs 2010打开项目并成功完成转换。构建时没有问题。但是我们在测试期间遇到了一个奇怪的错误。它首先给出类未注册然后是sehexception(0x80004005)。我搜索了所有内容但我找不到解决方案。我该怎么办..非常感谢您的帮助。
用于注册 .net 2.0 的旧批处理文件
path C:\Windows\Microsoft.NET\Framework\v2.0.50727
RegAsm.exe AkosLibraryCs.dll /tlb:AkosLibraryCs.tlb /codebase
用于注册 .net 4.0 的批处理文件
path C:\Windows\Microsoft.NET\Framework\v4.0.30319
regasm.exe AkosLibraryCs.dll /tlb:AkosLibraryCs.tlb /codebase
得到错误这一行:
IAkosFunctionPtr akosFunc(__uuidof(AkosFunction));
c++代码
#include "stdafx.h"
#include "tchar.h"
#import "AkosLibraryCs.tlb" raw_interfaces_only
using namespace AkosLibraryCs;
extern "C" __declspec(dllexport) _TCHAR* runFunction(_TCHAR* functionCode, _TCHAR* params)
{
void* resultAsVoid;
try
{
IAkosFunctionPtr akosFunc(__uuidof(AkosFunction)); ***//getting error this line!!!!!!!!***
void* functionCodeAsVoid=(void*)functionCode;
void* paramsAsVoid=(void*)params;
akosFunc->runFunction(functionCodeAsVoid,paramsAsVoid, &resultAsVoid);
}
catch(_com_error& ex )
{
LPCWSTR str = TEXT("Hata Oluştu");
MessageBox(0,ex.ErrorMessage(),str,0);
throw;
}
return static_cast<_TCHAR*>(resultAsVoid);
}