呼叫DLL的問題 |
答題得分者是:fangwy
|
Nelson Lo
一般會員 發表:35 回覆:87 積分:24 註冊:2003-04-04 發送簡訊給我 |
請教各位先進
小弟我有一個儀表提供的可能是C 寫的DLL
他的C 範例程式的宣告是
OEMDllImportExport BOOL WINAPI COT( int Channel, int* TimePS );
呼叫方法是
int nPs;
COT( 1 , &nPs ); 我用delphi呼叫,宣告是
function COT(Channel : integer ; var TimePS : integer) : boolean;
stdcall;external 'OEM.dll';
呼叫方法是
var
nPs : integer;
COT( 1 , nPs ); 我也有試過用 cdecl 的呼叫規則
但是都會出現錯誤訊息
"Invalid floating point operation"
請問是我語法錯誤了嗎
還是哪裡漏掉了 謝謝回應
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
|
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
|
Nelson Lo
一般會員 發表:35 回覆:87 積分:24 註冊:2003-04-04 發送簡訊給我 |
|
Nelson Lo
一般會員 發表:35 回覆:87 積分:24 註冊:2003-04-04 發送簡訊給我 |
|
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
我在网上搜了一把,发现多数询问"Invalid floating point operation"的都是在某些数据处理时发生,没有找到关于动态库处理的情况,也许你可以用C 调用这个功能试试,可能根本就是动态库的问题.
另外可能试试:
PSmallint = ^Smallint;
function COT(Channel : integer ; TimePS : PSmallint ) : boolean;
stdcall;external 'OEM.dll'; var
nPs : Smallint;
COT( 1 , PSmallInt(nPs) );
我给你提供的两种方法,在我的应用中都可行.只不过我的DLLS也是我写的,我能保证DLLS没问题.
|
Nelson Lo
一般會員 發表:35 回覆:87 積分:24 註冊:2003-04-04 發送簡訊給我 |
|
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
|
Nelson Lo
一般會員 發表:35 回覆:87 積分:24 註冊:2003-04-04 發送簡訊給我 |
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
|
Nelson Lo
一般會員 發表:35 回覆:87 積分:24 註冊:2003-04-04 發送簡訊給我 |
|
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
不好意思,没搞定,这个错误是EInvalidOp类错误.
提供一个链接:
http://it.yn.cninfo.net/pubnews/doc/read/8742421943220786691/103.oldsystem14.4726/index.asp
摘要:
EInvalidOp最常见的引发原因是没有协处理器的机器遇到一个协处理器指令。由于在缺省情况下Delphi总是把浮点运算编译为协处理器指令,因而在386以下微机上常常会碰到这个错误。此时只需要在单元的接口部分设置全局编译指示{$N-},选择利用运行时间库进行浮点运算,问题就可以解决了。 各种类型的浮点数(Real、Single、Double、Extended)越界引起同样的溢出异常。这同整数异常类是不同的。
有空我再试试,你再请教一下其他大大,如果有结果,麻烦贴出来,谢谢
|
Nelson Lo
一般會員 發表:35 回覆:87 積分:24 註冊:2003-04-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |