广告
淘宝内部优惠券
当前位置: 开发异常方案库» Delphi » Delphi7调用C++编写的dll提示AV错误

Delphi7调用C++编写的dll提示AV错误

开发异常方案库  收集整理于:2020-04-30 11:13:00  浏览:66次
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
function Add(a: Integer; b: Integer): Integer; stdcall; external 'Dll1.dll';
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := IntToStr(Add(3, 6)); //这样就失败   为什么?
//  Edit3.Text := IntToStr(Add(StrToInt(Edit1.Text), StrToInt(Edit2.Text)));   //这样就成功
end;
end.
代码如上图 就是简单的加法,不知道为什么第一种写法就出错,第二种就没事儿,请大佬解释下,谢谢
// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次,提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。
#ifndef PCH_H
#define PCH_H
extern "C" _declspec(dllexport) int Add(int a, int b);
extern "C" _declspec(dllexport) int Sub(int a, int b);
// 添加要在此处预编译的标头
#include "framework.h"
#endif //PCH_H
// pch.cpp: 与预编译标头对应的源文件
#include "pch.h"
// 当使用预编译的头时,需要使用此源文件,编译才能成功。
int Add(int a, int b)
{
    return a + b;
}
int Sub(int a, int b)
{
    return a - b;
}

------网友观点--------------------
知道为啥了,C++默认使用的cdecl调用方式,在Delphi调用时也使用关键字cdecl来调用 function Add(a: Integer; b: Integer): Integer; cdecl; external 'Dll1.dll'; 或者把C++改为stdcall的调用方式就行了 参考: https://www.cnblogs.com/jiftle/p/8451336.html https://blog.csdn.net/sss_369/article/details/87473329

------网友观点--------------------
顶你~

------网友观点--------------------
是这样的。
发布此文章仅为传递网友分享,不代表本站观点,若侵权请联系我们删除,本站将不对此承担任何责任。
软件开发 程序错误 异常 ybaby.netCopyright © 2020-2026  ybaby 版权所有  桂ICP备17004385号-2 网站地图