动态链接库中调用另一个动态链接库的函数

时间:2022-03-01 15:52:08
我新建了一个MFC静态链接的动态链接库a,这个库a中调用了另外一个同类型库b中的一个函数,这个函数返回CString类型,
同时库a也被delphi调用,使用的过程中出现问题,不知道怎么解决。
结果为:库a能成功调用用于显示对话框,该对话框的按钮响应函数调用了库b的返回CString类型的导出函数,点击按钮响应时出错

5 个解决方案

#1


dephi不好处理CString返回类型,用char等数组

#2


delhi没有调用返回CString类型的函数,这个函数只是在库a的响应函数调用

#3


楼主把相关代码帖出来吧。或者把具体的错误帖出来,
只说有问题了,什么问题啊?

#4


delphi调用库a中到处的函数 addobject();可以成功调用

///////////////////////////
procedure TForm1.N16Click(Sender: TObject);
begin
  addobject();//用于显示库a中的对话框
end;
//////////////////////////

在显示出的对话框中点击按钮,按钮响应函数如下:其中的autonumber("OBJECTS","OBJECT_ID");是库b中导出的返回CString类型的函数
///////////////////////////
void Caddobject::OnOK() 
{
::CoInitialize(NULL);  //初始化COM库
_ConnectionPtr m_pConnection;
HRESULT hr=m_pConnection.CreateInstance("ADODB.Connection");  //创建Connection对象
hr=m_pConnection->Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=hmdata;Data Source=JEFFY-A73938B38","sa","",adModeUnknown);

/*不能用下面链接数据库的代码,应使用上面的语句。如果用下面的语句会造成添加文件(目录不存在)只能添加在ini脚本所在目录中的文件。
    char temp[100]="";
    ::GetPrivateProfileString("constr1","str","null",temp,100,".\\settings.ini");
    m_pConnection->Open(temp,"","",-1);*/
  
CString spaymode1,spaymode2,spaymode3;
spaymode1=autonumber("OBJECTS","OBJECT_ID");

m_edit1.GetWindowText(spaymode2);
m_combo1.GetWindowText(spaymode3);
_variant_t RecordsAffected;

CString sql="Insert into OBJECTS (OBJECT_ID,NAME,CATEGORY) values('"+spaymode1+"','"+spaymode2+"','"+spaymode3+"')";
try
{
    m_pConnection->Execute((_bstr_t)sql,&RecordsAffected,adCmdText);
AfxMessageBox("成功添加控制对象!");
}
catch(_com_error e)   //捕捉异常
{
CString temp;
temp.Format("addobject出错:%s",e.ErrorMessage());
AfxMessageBox(temp);
return;
}
CDialog::OnOK();
}
/////////////////////////////////////////////////////


autonumber("OBJECTS","OBJECT_ID");是通过模块定义文件导出的

点击错误信息如下:
Project hotmanager.exe raised exception class EExternalException with message 'External exception E06D7363'. Process stopped. Use Step or Run to Continue

#5


用char吧 

#1


dephi不好处理CString返回类型,用char等数组

#2


delhi没有调用返回CString类型的函数,这个函数只是在库a的响应函数调用

#3


楼主把相关代码帖出来吧。或者把具体的错误帖出来,
只说有问题了,什么问题啊?

#4


delphi调用库a中到处的函数 addobject();可以成功调用

///////////////////////////
procedure TForm1.N16Click(Sender: TObject);
begin
  addobject();//用于显示库a中的对话框
end;
//////////////////////////

在显示出的对话框中点击按钮,按钮响应函数如下:其中的autonumber("OBJECTS","OBJECT_ID");是库b中导出的返回CString类型的函数
///////////////////////////
void Caddobject::OnOK() 
{
::CoInitialize(NULL);  //初始化COM库
_ConnectionPtr m_pConnection;
HRESULT hr=m_pConnection.CreateInstance("ADODB.Connection");  //创建Connection对象
hr=m_pConnection->Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=hmdata;Data Source=JEFFY-A73938B38","sa","",adModeUnknown);

/*不能用下面链接数据库的代码,应使用上面的语句。如果用下面的语句会造成添加文件(目录不存在)只能添加在ini脚本所在目录中的文件。
    char temp[100]="";
    ::GetPrivateProfileString("constr1","str","null",temp,100,".\\settings.ini");
    m_pConnection->Open(temp,"","",-1);*/
  
CString spaymode1,spaymode2,spaymode3;
spaymode1=autonumber("OBJECTS","OBJECT_ID");

m_edit1.GetWindowText(spaymode2);
m_combo1.GetWindowText(spaymode3);
_variant_t RecordsAffected;

CString sql="Insert into OBJECTS (OBJECT_ID,NAME,CATEGORY) values('"+spaymode1+"','"+spaymode2+"','"+spaymode3+"')";
try
{
    m_pConnection->Execute((_bstr_t)sql,&RecordsAffected,adCmdText);
AfxMessageBox("成功添加控制对象!");
}
catch(_com_error e)   //捕捉异常
{
CString temp;
temp.Format("addobject出错:%s",e.ErrorMessage());
AfxMessageBox(temp);
return;
}
CDialog::OnOK();
}
/////////////////////////////////////////////////////


autonumber("OBJECTS","OBJECT_ID");是通过模块定义文件导出的

点击错误信息如下:
Project hotmanager.exe raised exception class EExternalException with message 'External exception E06D7363'. Process stopped. Use Step or Run to Continue

#5


用char吧