如題
delphi中屏蔽ADO塊的代碼沒有問題,但是加上就沒法呼叫
delphi中的代碼:
library ADSB;
uses
ShareMem, SysUtils, ADODB, DB, ActiveX, Windows, StrUtils,
Classes;
{$R *.res}
const
connectionstr='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=airline2;Data Source=.';
function aircraft(var FlightID:PChar):PChar;cdecl;export;
var
PType:string;
con1: TADOConnection;
qry1: TADOQuery;
begin
CoInitialize(nil);
qry1:=TADOQuery.Create(nil);
con1:=TADOConnection.Create(nil);
qry1.Connection:=con1;
qry1.ConnectionString:=connectionstr;
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add('select NO from routes where FN collate Chinese_PRC_CS_AS=:a');
qry1.Parameters.ParamByName('a').Value:=StrPas(FlightID);
qry1.Open;
if qry1.RecordCount>0 then
begin
PType:=qry1.Fields[0].Value;
end;
Result:=PChar(PType);
qry1.Close;
CoUninitialize;
end;
exports
aircraft;
begin
end.
vs中的代碼如下:
#include <Windows.h>
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
typedef char*(*myFun)(char* arg1);
int main(int argi,char* argv[])
{
HINSTANCE hDll;
hDll=LoadLibrary("ADSB.dll");
if (hDll!=NULL)
{
myFun fun;
fun=(myFun)GetProcAddress(hDll, "aircraft");
if(fun!=NULL)
{
char* p="AAF103";
char* pl=fun(p);
cout<<pl<<endl;
}
FreeLibrary(hDll);
}
system("pause");
return 0;
}
求各位大神幫忙看看什么地方有問題?謝謝!
uj5u.com熱心網友回復:

提示錯誤如圖所示
uj5u.com熱心網友回復:
幾點建議:不要使用pchar作為函式回傳值,放到函式輸入引數里去。qry使用套接子就不要使用con了,二選一。使用pchar要申請記憶體。可以在動態庫里單步除錯,這是基本的技能。uj5u.com熱心網友回復:
可以在動態庫里單步除錯,這是基本的技能。uj5u.com熱心網友回復:
con1不用設定ConnectionString嗎?qry1需要設定ConnectionString?
qry1.ConnectionString:=connectionstr;
動態庫里面去單步除錯一下 看問題定位到哪里
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/76061.html
標籤:語言基礎/算法/系統設計
下一篇:請教Delphi高人
