c++ DLL 文件,建议用最简单的c++编辑工具。不会加入很多无关的DLL文件。本人用codeblocks+mingw。不像

VS2010,DLL编译成功,调用的时候会提示缺其他DLL。 系统生成的main.h和main.cpp

#ifndef __MAIN_H__

#define __MAIN_H__

#include <windows.h>

/* To use this exported function of dll, include this header

* in your project.

*/

#ifdef BUILD_DLL

#define DLL_EXPORT __declspec(dllexport)

#else

#define DLL_EXPORT __declspec(dllimport)

#endif

#ifdef __cplusplus

extern "C"

{

#endif

int DLL_EXPORT Add(int plus1, int plus2); //导出函数Add

#ifdef __cplusplus

}

#endif

#endif // __MAIN_H__

#include "main.h"

// a sample exported function

int DLL_EXPORT Add(int plus1, int plus2) //导出函数Add 的实现

{

int add_result = plus1 + plus2;

return add_result;

}

extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)

{

switch (fdwReason)

{

case DLL_PROCESS_ATTACH:

// attach to process

// return FALSE to fail DLL load

break;

case DLL_PROCESS_DETACH:

// detach from process

break;

case DLL_THREAD_ATTACH:

// attach to thread

break;

case DLL_THREAD_DETACH:

// detach from thread

break;

}

return TRUE; // succesful

}

只有一个简单函数Add,就是为了测试delphi能不能成功调用

delphi 用按钮加入调用函数

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

btn1: TButton;

Edit1: TEdit;

procedure btn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

_DLLMoudle: THandle;

_GetAdd:function (plus1:Integer; plus2:Integer):Integer;cdecl;

//动态调用,不要少了cdecl,百度看到是因为dll调用函数,传参数的差异

// function Add( plus1:Integer; plus2:Integer):Integer;

// stdcall; external 'MyDll.dll' name 'Add';

// 静态调用,静态调用有问题,还是声明stdcall 再C++种声明导出函数的原因

// 把stdcall 改为cdecl 就可以用静态调用了。具体C++声明函数和delphi对应关系看后面

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);

var

l_int : integer;

begin

try

_DLLMoudle := Loadlibrary('MyDLL.dll');

ShowMessage('加载成功!!!');

except

ShowMessage('加载失败!!!');

Exit;

end;

if _DLLMoudle > 32 then

begin

try

begin

@_GetAdd:=GetProcAddress(_DLLMoudle,'Add');

l_int:=_GetAdd(5,6);

Edit1.Text:=IntToStr(l_int);

end

except

ShowMessage('有问题!');

end;

end;

// l_int:=Add(1,3);

// Edit1.Text:=IntToStr(l_int);

end;

end.

C++的参数调用方式 对应的DELPHI的参数调用方式

_declspec cdecl

WINAPI,CALLBACK stdcall

PASCAL pascal

以上请多试一下。我也是测试很多次才成功的。以后核心逻辑用C++。

Delphi动态调用C++写的DLL的更多相关文章

  1. 发现个delphi调用vc写的Dll中包括pchar參数报错奇怪现象

    发现个delphi调用vc写的Dll中包括pchar參数奇怪现象 procedure中的第一行语句不能直接调用DLL的函数,否则会执行报错,在之前随意加上条语句就不报错了奇怪! vc的DLL源代码地址 ...

  2. Delphi7程序调用C#写的DLL解决办法(转)

    近来,因工作需要,必须解决Delphi7写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行:    编写C#dll的方法都一样,首先在vs2005中创建一个 ...

  3. Delphi7程序调用C#写的DLL解决办法

     近来,因工作需要,必须解决Delphi7写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行:    编写C#dll的方法都一样,首先在vs2005中创建一 ...

  4. c++ c# java 调用 c++ 写的dll

    1. vs 中新建win32 dll 项目   testdll 添加实现文件       test.cpp #include "stdafx.h" #include <ios ...

  5. C#动态调用C++编写的DLL函数

    C#动态调用C++编写的DLL函数 动态加载DLL需要使用Windows API函数:LoadLibrary.GetProcAddress以及FreeLibrary.我们可以使用DllImport在C ...

  6. Delphi动态调用Java的WebService 转

    Delphi动态调用Java的WebService —— 基于“Axis2发布WebService例子(HelloWorld)” uses ComObj; var WsObject: Variant; ...

  7. c++调用c#写的DLL

    c++调用c#写的DLL: 此文章演示了建立c#的dll: c++建立工程,引入dll: 不能解决的问题: 指定dll的路径,在代码里面直接写 #using "xxx.dll" 必 ...

  8. QT调用C#写的Dll

    参见: https://blog.csdn.net/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数的,是一种中间语言,需要 ...

  9. 【转载】java调用C++写的DLL

    用java调用C++写的DLL一直以来都是一个比较麻烦但又很常见的问题. 我们知道,使用 JNI 调用 .dll/.so 共享类库是非常非常麻烦和痛苦的. 如果有一个现有的 .dll/.so 文件,如 ...

随机推荐

  1. linux下的环境变量配置

    方法一: 方法二:

  2. 在linux下,去除^M,将windows格式文件(dos文件)改为unix格式文件

    在Windows系统下编辑的文件,换行符回车的格式为'\r\n',在linux系统下,回车的格式为'\n',在Windows下编辑的文本文件在上传至linux服务器时,回车'\r\n'就显示成^M+' ...

  3. Android重打包+重新签名工具Apktool Box

    可实现apk反编译+重新打包+重新签名,界面如下 : 部分引用自开源代码:http://github.com/Bu4275/AutoAPKTool

  4. TCP/IP SIGPIPE信号

    往一个已经接受FIN的套接中写是允许的,接受到FIN仅仅代表对方不再发送数据. 在收到RST段之后,如果在调用write就 会产生SIGPIPE信息,对于这个信号的处理我们通常 解决方法 signal ...

  5. 用vlan实现同一网段的的各部门之间有的可以通信有的不可以通信

    日前老师上课演示一个项目:实现公司同一网段的各个部门之间有的可以通信有的无法通信.我们用的是思科测试软件模拟操作,个人觉得很好用.       在刚开始做这个项目的时候我以为端口是对应的,如图,交换机 ...

  6. CS229 6.9 Neurons Networks softmax regression

    SoftMax回归模型,是logistic回归在多分类问题的推广,即现在logistic回归数据中的标签y不止有0-1两个值,而是可以取k个值,softmax回归对诸如MNIST手写识别库等分类很有用 ...

  7. 《linux性能及调优指南》 3.3 内存瓶颈

    摘要:3.3内存瓶颈OnaLinuxsystem,manyprogramsrunatthesametime.Theseprogramssupportmultipleusers,andsomeproce ...

  8. idea一个窗口开启多个项目

    在将旧项目重构为微服务架构时,建立了十几个新的项目,对于相互之间存在调用的微服务,开发时都要同时启动,一开始我开了好多个idea窗口,结果电脑卡的不行,后来发现原来可以将项目都放到同一个idea窗口进 ...

  9. WPF DataGrid 数据绑定、样式、分页、增删改查,连接Access数据库

    先上效果图: XAML: <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&q ...

  10. 将浏览器的内容复制到Linux的文件里面

    直接使用ctrl +c 复制的内容  用ctr +V贴入Linux系统文件的话,格式是乱的 可以使用EOF的方式 [root@centos7 ~]# cat <<EOF >tttt. ...