【发布时间】:2011-02-13 07:57:03
【问题描述】:
在 Delphi 2010 中使用以下行代码时,出现“访问冲突”错误,但相同的代码在 VC++ 中运行良好。
Delphi 2010 代码是
var
hMyInf : HINF;
begin
hMyInf := SetupOpenInfFile('.\\DIGIMHID.INF','Mouse', INF_STYLE_WIN4,Nil);
VC++代码是
hMyInf = SetupOpenInfFile(".\\DigimHID.inf", "Mouse", INF_STYLE_WIN4, NULL);
请帮我解决这个问题。 谢谢大家。
【问题讨论】:
-
显示 SetupOpenInfFile 的 Delphi 声明。
-
TSetupOpenInfFileW = function(const FileName: PWideChar; const InfClass: PWideChar; InfStyle: DWORD; ErrorLine: PUINT): HINF; stdcall; -
Delphi 调用中的双反斜杠的一个问题:C++ 版本使用它来转义 `` 所以最终文本只包含一个; Delphi 版本不使用 '\' 作为转义字符,因此您实际上会得到两个反斜杠。但这通常不是问题,显然 Windows 可以容忍这一点;即使没有,错误也不会是 AV。您在哪里找到 TSetupOpenInfFileW 定义?我想试试你的代码,但找不到。
-
以上还不够——我没有看到错误。展示可以编译的Delphi代码示例。
-
因为你得到一个 AV 我怀疑无效的内存访问是在 Delphi 端完成的(在控制传递给
SetupOpeninfFile例程之前);根据您的声明,我怀疑SetupOpenInfFile不是一个简单的导入方法,它是一个函数指针并且它没有被初始化。把它放在你的函数调用之前:if not Assigned(SetupOpenInfFile) then raise Exception.Create('It''s a function pointer and it''s not initialized');。如果引发异常,请在您正在使用的单元中搜索函数名称,查找分配。你可能需要调用一些东西来初始化。