DLL调用的奇怪问题,大家帮忙~~高分相送~~~~
下面是我的DLL内容:
library SnAPI;
uses
ShareMem, Windows, SysUtils, Classes, Nb30, SnListView;
type
PASTAT = ^TASTAT;
TASTAT = record
Adapter: TAdapterStatus;
NameBuffer: TNameBuffer;
end;
function SnGetMacAddress: String; stdcall;
var
NCB : TNCB;
S: String;
Adapt : TASTAT;
LanaEnum : TLanaEnum;
I, J, M : integer;
StrPart, StrMac : string;
begin
Result:='';
FillChar(NCB, SizeOf(TNCB), 0);
NCB.ncb_command := Char(NCBENUM);
NCB.ncb_buffer := PChar(@LanaEnum);
NCB.ncb_length := SizeOf(TLanaEnum);
S := Netbios(@NCB);
M := 1;
if (Win32Platform = VER_PLATFORM_WIN32_WINDOWS) then
M := 0;
for I := 0 to Integer(LanaEnum.length) - 1 do
begin
FillChar(NCB, SizeOf(TNCB), 0);
NCB.ncb_command := Char(NCBRESET);
NCB.ncb_lana_num := LanaEnum.lana[I];
Netbios(@NCB);
Netbios(@NCB);
FillChar(NCB, SizeOf(TNCB), 0);
NCB.ncb_command := Chr(NCBASTAT);
NCB.ncb_lana_num := LanaEnum.lana[I];
NCB.ncb_callname := '* ';
NCB.ncb_buffer := PChar(@Adapt);
NCB.ncb_length := SizeOf(TASTAT);
if M = 1 then
begin
if Netbios(@NCB) = Chr(0) then
StrMac := '';
for J := 0 to 5 do
begin
StrPart := IntToHex(Integer(Adapt.Adapter.adapter_address[J]), 2);
StrMac := StrMac + StrPart ;
end;
SetLength(StrMac, Length(StrMac));
end;
if M = 0 then
begin
if Netbios(@NCB) <> Chr(0) then
StrMac := '';
for J := 0 to 5 do
begin
StrPart := IntToHex(Integer(Adapt.Adapter.adapter_address[J]), 2);
StrMac := StrMac + StrPart ;
end;
SetLength(StrMac, Length(StrMac));
end;
end;
Result := Trim(StrMac);
end;
exports
SnGetMacAddress;
begin
end.
调用它的APP:
procedure TForm1.Button1Click(Sender: TObject);
var
S: String;
begin
S := SnGetMacAddress;
MessageBox(Handle, PChar(S), 'Mac Address', 0);
end;
调用之后,会弹出一个MessageBox显示正确的MAC地址,但是当我点了这个MessageBox的确定按钮后,会激发一个异常“Invaild Point ......”
请问如何解决?????
谢谢~~