to duz(肚子) 使用result[i]:="..."; 是可以的 在Delphi调用如var aVariant:OleVariant; begin aVariant:=Get_Records('abc') showmessage(aVariant[2]); end;
result 改成return呀 不知行不行?
Function Get_Records(Name:phar):OleVariant;Stdcall; var res:olevariant; begin res:= VarArrayCreate([0,2],varVariant); res[0]:='1234567'; res[1]:='adsfasdf'; res[2]:='asdfasdf'; resutl:=res; end;
在Delphi调用如var
aVariant:OleVariant;
begin
aVariant:=Get_Records('abc')
showmessage(aVariant[2]);
end;
不知行不行?
var res:olevariant;
begin
res:= VarArrayCreate([0,2],varVariant);
res[0]:='1234567';
res[1]:='adsfasdf';
res[2]:='asdfasdf';
resutl:=res;
end;
procedure Get_Records(Name:phar;var Res:OleVariant);Stdcall;
...呵呵,VC我不懂的,Delphi也学了没几天。(蹭分来了:)
改成这样效果不是一样??
VARIANT* Get_Records(char* name);
使用:
VARIANT* t=Get_Records(char* name);
BSTR b1=t->bstrVal;
t++;
BSTR b2=t->bstrVal;
t++;
BSTR b3=t->bstrVal;可能是这样,没有验证过.
我去试试看 :)
强烈建议去microsoft或borland去查询新闻组,很多人问safearray的问题,保你一天就解决。
http://www.csdn.net/expert/topic/167/167849.shtm
http://www.csdn.net/expert/topic/167/167848.shtm
http://www.csdn.net/expert/topic/167/167846.shtm
http://www.csdn.net/expert/topic/167/167844.shtm
http://www.csdn.net/expert/topic/167/167838.shtm
http://www.csdn.net/expert/topic/167/167842.shtm
http://www.csdn.net/expert/topic/167/167835.shtm
http://www.csdn.net/expert/topic/167/167843.shtm
http://www.csdn.net/expert/topic/167/167833.shtm
http://www.csdn.net/expert/topic/167/167837.shtm
Function Get_Records(Name:phar;Var iLength:Integer):OleVariant;Stdcall;
begin
result:= VarArrayCreate([0,2],varVariant);
result[0]:='1234567';
result[1]:='adsfasdf';
result[2]:='asdfasdf';
Length:=3;
end;然后在调用时先给字符串数组类型的变量分配内存,再赋值!
但是DLL返回值只能是32为的DWORD数值,兄弟你用的,倒有点象是需要使用OLE、ACTIVEX之类的!!
typedef Variant ( pascal* GetRecordsProc)( char *name );
HMODULE hInst;
GetRecordsProc Get_Records; hInst = LoadLibrary( "testdll.DLL" );
if ( hInst == 0 ) {
ShowMessage( "不能找到动态链接库!");
return;
} try {
Get_Records = (GetRecordsProc)GetProcAddress( hInst, PSTR(MAKELONG( 100, 0)) );
if (0 == Get_Records) {
ShowMessage( "不存在函数Get_Records");
FreeLibrary( hInst );
return;
} Variant v;
Variant *vx; v = Get_Records( NULL );
vx = (Variant *)v.ArrayLock();
ShowMessage( vx[2] );
v.ArrayUnlock();
FreeLibrary( hInst );
}
catch (... ) {
FreeLibrary( hInst );
}