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

一个DLL调用的有关问题,蹊跷的函数类型声明

2012-03-19 
一个DLL调用的问题,蹊跷的函数类型声明我的目的是想调用aspriseOCR.dll,里面有个函数,类型定义如下:String

一个DLL调用的问题,蹊跷的函数类型声明
我的目的是想调用aspriseOCR.dll,里面有个函数,类型定义如下:
String   OCR(String   filename,int   type)
功能是识别图片中的数字和文本。

静态调用主体如下:(已经把lib文件加入工程)

TForm1   *Form1;
extern   "C "   __declspec(dllimport)   __stdcall   String   OCR(String,int);

//------------------------------------

void   __fastcall   TForm1::Button4Click(TObject   *Sender)
{
Edit5-> Text=OCR( "E:\\a.bmp ",-1);


如果在extern   "C "   __declspec(dllimport)   __stdcall   String   OCR(String,int);
中声明OCR返回值为String,执行没出错信息,但也没有返回结果。
如果写成extern   "C "   __declspec(dllimport)   __stdcall     OCR(String,int);
即把OCR的返回值设为缺省,(应当为int吧?),这时运行没出错,而且也现aspriseOCR.dll   中的对话框(它是一个demo,让你买),但返回值却不对。根据这个对话框判断,应当是调用成功了(随DLL发布的DEMO,用C#写的,就有这个对话框,而且返回正确值),但为什么返回值不正确?即使我把返回值强制转换为文本。

动态调用的结果和第一种静态调用的结果相同,不出错,也没反应。



[解决办法]
Dll 最好不要使用 String 类型传递,使用 char * 比较好!
[解决办法]
VC 的CString与VCL的String(=AnsiString)是不一样的
[解决办法]
extern "C " __declspec(dllimport) void __stdcall OCR(String,int,char *);
我觉得这样写更安全
--但为什么不能把char* 放在 __stdcall 后面?
规定
就像virtrul void fun()不能写成 void virtrul fun()

热点排行