delphi调用c的dll函数时出现错误,请高手指教!急!!(另加100分,决不食言!) (100分)

  • 主题发起人 主题发起人 流浪星
  • 开始时间 开始时间

流浪星

Unregistered / Unconfirmed
GUEST, unregistred user!
d6中调用vc++的dll时出现如下错误:
链接文件ic.exe到不存在的输出:sticcw32.dll:icc_open。

调用此dll中的其他几个函数都可以,就icc_open不行。
怎么回事?请大虾们赶快出手。
 
HOHO

我以前也遇到过
但是我是调用哪个函数也不行
最后用extern "C" {function's body}
解决的
 
我也看到别人说用extern "c",但好像是在vc++的dll中用;而我拿到的是一个已编译的dll,
怎么办?
 
那么这个问题就太奇怪了
你用BCB,VC来试试
如果都行
那么你重装Delphi
试试
 
我用tdump看了,有这个函数。
 
用vb调用此dll编的一个程序是可以的,函数名也是“icc_open”。
 
[:(]我在另一台机上试了(d6),也是这样。
 
请大家帮帮忙啊,如果及时解决的话,我会再加分的。
现在我只好用串口通讯先自己写。。。惨!!!
 
c中:
格 式 WORD read_card(
HICC hiCC,
BYTE zone,
unsigned addr,
unsigned len,
LPBYTE data);
格 式 WORD write_card(
HICC hiCC,
BYTE zone,
unsigned addr,
unsigned len,
LPBYTE data);

做成dll,供调用。

Vb中:
Declare Function write_card Lib "D:/SS/VB32/STICCW32.DLL" (ByVal hiCC%, ByVal zone%, ByVal addr%, ByVal data_len%, ByVal dat$) As Integer
Declare Function read_card Lib "D:/SS/VB32/STICCW32.DLL" (ByVal hiCC%, ByVal zone%, ByVal addr%, ByVal data_len%, ByVal dat$) As Integer

调用正常。

Delphi中:
function write_card(hiCC,zone,addr,data_len:integer;dat:pchar):integer;stdcall;external 'stiCCw32.dll' name 'write_card';
function read_card(hiCC,zone,addr,data_len:integer;dat:pchar):integer;stdcall;external 'stiCCw32.dll' name 'read_card';

调用read_card正常,write_card返回一个固定的错误值,很大:$41C700A6。

现在就只写卡不行,其他都可以了。各位大虾,赶紧帮我想想,若解决了,另加100分,决不食言!
 
大虾们,请快出招啊!我都急死了!!!
 
function write_card(hiCC:Integer;zone: Byte; addr,data_len:integer;dat:pchar):Word;stdcall;external 'stiCCw32.dll' name 'write_card';
function read_card(hiCC:Integer;zone: Byte;addr,data_len:integer;dat:pchar):Word;stdcall;external 'stiCCw32.dll' name 'read_card'
 
可能是调用方式的问题
把 函数声明中的 stdcall 改为 cdecl

即:
function write_card(hiCC,zone,addr,data_len:integer;dat:pchar):integer;cdecl;
external 'stiCCw32.dll' name 'write_card';
 
To tseug
你的mail是多少?
 
谢谢tseug!改为word型就可以了。可是为什么用integer会返回那么大一个值呢?
另外,怎样把另100分给你?
要不,我另开一个问题,你进来拿分得了。
 

Similar threads

后退
顶部