首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于VC和C#分别调用VC写的COM组件有关问题

2012-01-11 
关于VC和C#分别调用VC写的COM组件问题有一组用来进行OCR识别的代码,将其用VC封装成COM组件,然后用VC和C#分

关于VC和C#分别调用VC写的COM组件问题
有一组用来进行OCR识别的代码,将其用VC封装成COM组件,然后用VC和C#分别调用这个COM组件(代码一致),结果出现VC调用成功,c#调用失败的问题;经调试发现问题出在COM组件加载OCR引擎的时候,主要代码如下:

 

C/C++ code
  /*szOCRDLL(绝对路径)为其他公司提供的OCR识别的DLL,该DLL同时调用了其他一些DLL,这些dll放在一个目录中,比如D://TmpDLL,在调用::LoadLibrary((LPCTSTR)szOCRDll)之前已经设置当前工作目录为D://TmpDLL,方便搜索并加载这些dll;*/          SetLastError(0);    if (HMODULE hModule = ::LoadLibrary((LPCTSTR)szOCRDll))    {            //在这里调用GetLastError的话,VC和C#分别返回 0 和 6        GetDriverFuncs_Ptr pGetDriverFuncs = (GetDriverFuncs_Ptr)::GetProcAddress(hModule, "GetDriverFuncs");        if (!pGetDriverFuncs)        {            ::FreeLibrary(hModule);             return OCR_ERROR_LOAD_DLL_FAILED;        }                //获取DLL提供的功能函数表        OCR_DWORD funcCount = 0;        OCR_LPFunc tempTable = NULL;        pGetDriverFuncs(&tempTable, &funcCount);        DWORD * funcTable = new DWORD[256];        int i = funcCount;        while(i--)        {           funcTable[tempTable[i].func_index] = (DWORD)tempTable[i].func_address;        }            //开始初始化OCR引擎,INDEX_OCRInitialize是OCRInitialize函数在函数表中的索引        OCR_ErrCode err = ((OCRInitialize)funcTable[INDEX_OCRInitialize])(NULL, L"en", GetLicense);                //在这里调用GetLastError的话,VC和C#分别返回 0 和 126        if(OCR_SUCCESS != err)           return err;    }

  看起来c#调用时,似乎是加载某些dll失败,但是实在找不到原因,路径什么的应该没什么问题,VC就能正确调用,还望高手相助,不胜感激;



[解决办法]
首先保证加载成功,然后才能说是否为调用时的错误
[解决办法]
用depend.exe看看需要加载什么dll;
DLL中加入了一个的DEF文件
参考:
http://topic.csdn.net/t/20050902/20/4246780.html
[解决办法]
enable native debug, then debug into

热点排行