DLL 调用的问题,与ShareMem无关。(50分)

  • 主题发起人 主题发起人 shiwee
  • 开始时间 开始时间
S

shiwee

Unregistered / Unconfirmed
GUEST, unregistred user!
我的代码是这样的:
1。外部声明:
function GetDatabaseDBTagID(TagDBInfo: PTagDBInfo; var dwErrorcode: DWORD):Integer;
cdecl external 'cxaccess.dll';
2。调用dll
procedure TForm1.BtnTestClick(Sender: TObject);
var
dwError: Cardinal;
TagInfo: PTAgDBInfo;
begin
{TagInfo初始化。。}
GetDatabaseDBTagID(TagInfo, dwError); {调用dll提供的函数}
end;
3。dll定义
function GetDatabaseDBTagID(var TagDBInfo: PTagDBInfo; var dwErrorcode: DWORD):Integer;
var
condition, TableName, FieldName: string;
HistorySQLStatementInsertTagsStr: string;
RecordCount: Integer;
Fields: TFields;
begin
Result := -1;
dwErrorCode := DATABASE_SUCCESS;
Fields := TFields.Create(nil);
TableName := 'tags';
FieldName := 'DBTagID';
Condition := Format(ConditionStr, [TagDBInfo^.TagName, TagDBInfo^.TagType, TagDBInfo^.TagAddress,
TagDBInfo^.DeviceName, TagDBInfo^.DeviceZero, TagDBInfo^.DeviceSpan]);{出错之处}
。。。。。。。。
end;

错误信息:
Project XX.exe raise exception class EAccess Voilation with message ' Access Violation at
address 002b5c3f in module 'cxaccess.dll' .Read of address 00000039'

通过对dll源码加showmessag,发现每次运行到代码中{出错之处}时,就会出错,估计是内存地址
的问题。改如何改呢。

我已经很穷了,不要嫌弃。。。。。


 
3。dll定义
function GetDatabaseDBTagID(TagDBInfo: PTagDBInfo; var dwErrorcode: DWORD):Integer;
把第一个Var去掉看看... ^^^^^^^^^^^^^^^^^^^^^^^
 
看一下dll的函数的声明中有没有stdcall,如果有就先去掉,如果没有就加上。:)
为什么?试一试嘛。
 
我试过了,连cdcel都试过了.
 
1。外部声明:
function GetDatabaseDBTagID(TagDBInfo: PTagDBInfo; var dwErrorcode: DWORD):Integer;
cdecl external 'cxaccess.dll';
^^^^^ ->改为stdcall;

procedure TForm1.BtnTestClick(Sender: TObject);
var
dwError: Cardinal;
TagInfo: PTAgDBInfo;
begin
[red] {TagInfo初始化。。} //你确认这里已经给TagInfo分配空间了么?[/red]

GetDatabaseDBTagID(TagInfo, dwError); {调用dll提供的函数}
end;

还有,DLL中Interface部分你确认是这样声明的么?
function GetDatabaseDBTagID(TagDBInfo: PTagDBInfo; var dwErrorcode: DWORD):Integer; stdcall;


 
我按你说的调整了。还是那个错误。
dll引出对象是怎么回事,是 PTagDBInfo 的原因么?我手边没有这方面的资料。
希望继续帮我。
 
你把代码发到我邮箱,我看看.tseug@263.net
 
就是 var 那儿的毛病。感谢各位。可惜刚来论坛,没有多少money。
 

Similar threads

后退
顶部