如题
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;beginend.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;
}求各位大神帮忙看看什么地方有问题?谢谢!
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;beginend.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;
}求各位大神帮忙看看什么地方有问题?谢谢!
解决方案 »
- 这个函数我想把 Bao代替Buf 作为OldRecv的参数返回要怎样做呢?
- 一个我搞不定的问题
- 故题重问:如何作自己的delphi安装程序。
- 关于Treeview的button
- 求助,点新建按钮在DBEDIT上选择一下就会跳到有数据的一行。求解
- 简单问题
- 在DLL中的一个函数中,怎样把这堆东西返回到主程序中啊?
- 如何在一个Service Application中运行另外一个exe文件。
- 有没有办法将一些常用表单封装起来给用户拖控件那样使用?
- ★★★!!!对面的大虾看过来!!!★★★
- c++结构体指针 转 Delphi, 请高手有空帮下 谢谢
- delphi7 用 idhttp.get 抓取网页显示乱码如何解决?
qry1需要设置ConnectionString?
qry1.ConnectionString:=connectionstr;动态库里面去单步调试一下 看问题定位到哪里