c++builder delphi 调用dll dll编写
c++builder动态调用dll
// 定义
typedef int __stdcall MyFunction (int x, char *str); int rtn = ;
String dllName = "XXXX.dll";
HINSTANCE hInstance = LoadLibrary(dllName.c_str());
MyFunction * pMyFunction = (MyFunction*) GetProcAddress(hInstance, "rdcompany"); // 函数名称要正确
if (pMyFunction == NULL)
{
// 提示
} rtn = pMyFunction(, "aa");
FreeLibrary(hInstance);
hInstance = NULL;
C++builder的dll导出类
// Enable RTTI generation for private fields
#pragma explicit_rtti fields(private) class __declspec(delphiclass) TBuffer {
private:
int wrHead, rdHead; // ...
public:
TBuffer() { }
};
http://docwiki.embarcadero.com/RADStudio/Berlin/en/Delphi_RTTI_and_C++Builder
c++导出函数
extern "C" __declspec(dllexport) int __stdcall fun();
静态调用
extern "C" __declspec(dllimport) int __stdcall test();
根据dll生成lib文件
cmd命令后
implib E:\MYDEV\CRT_310.lib E:\MYDEV\CRT_310.dll
implib CRT_310.lib CRT_310.dll
调用的工程里添加lib文件或者#pragma link "CRT_310.lib"
这里HANDLE 是typedef void *HANDLE;
typedef HANDLE APIENTRY CommOpenWithBaut(char *Port, BYTE _BaudOption);
delphi静态调用dll
function Write_DF02(ucSFI: byte; wFileLen: Word; pucData: PByte): integer; stdcall external 'my.dll';
procedure Set_Path(pchPath: PAnsiChar); stdcall external 'my.dll';
const
UrlMonLib = 'URLMON.DLL'; function CreateURLMoniker; external UrlMonLib name 'CreateURLMoniker';
function readCardInfo_json():PAnsiChar;stdcall; external 'test.dll' ;
function readCardInfo_json():PAnsiChar;stdcall; external 'test.dll' name 'readCardInfo_json_myname';//函数别名
pansichar参数返回
name: array[0..50] of AnsiChar;
age:integer;
money:double;
fun(name,@age,@money);
fun(name,age,money);
用 name:TArray<AnsiChar>; 应该也可以。就是麻烦,定义和分配2行代码。
setlength(name,50);
二、delphi动态调用dll
//函数原型生命
type
Taddc = function: TStringList; stdcall;
TGetCPUID = function(CPUID: PAnsiChar): integer; stdcall; //注1
//
var
hh: THandle;
addc: Taddc;
GetId: TGetCPUID;
temp: TStringList;
i: Integer;
begin
hh := LoadLibrary('DLL.dll');
try
if hh = then
begin
ShowMessage('load error');
exit;
end;
//装载方法
@addc := GetProcAddress(hh, PChar('testStr'));
GetId := GetProcAddress(hh, pchar('GetCPUID')); //invoke
GetId();
if not (@addc = nil) then
begin
addc;
end
else
begin
RaiseLastWin32Error;
end;
finally
FreeLibrary(hh);
end;
delphi Berlin版本 如何给PAnsiChar赋值?
StrCopy(value, PAnsiChar(AnsiString(kvalue)));
因为是UnicodeString,所以必须先进行AnsiString转换。
#define DLLEXPORT_API extern "C" _declspec(dllexport)
dll函数导出 改名别名
delphi太简单了
procedure a(); stdcall;
begin end; exports
a name '@$xp$20Controls@TAnchorKind';
function InitCommExt(): Integer; stdcall;
c++builder找不到方法
http://toby.logdown.com/posts/220527/c-builder-define-dll-export-function-names-using-def-file
DetectCard(ComHandle: THANDLE; var CardType: Byte; var CardInfor: Byte): Integer; stdcall; external 'aa.dll'; dll调用,引用地址 var
CardType: Byte;
CardInfor: Byte;
rec := DetectCard(CHandle, CardType, CardInfor);
c#调用dll的函数别名
[DllImport("test.dll", EntryPoint= "myfun")] public static extern int myfun_KP(StringBuilder connstr);//
FillChar( readdata, SizeOf( readdata ), 0 );
c++builder delphi 调用dll dll编写的更多相关文章
- Delphi 调用C# DLL(包含委托)
例子 C# Dll: using System; using System.Collections.Generic; using System.Text; using System.Diagnosti ...
- delphi 调用c#dll
public interface iProduct { string Buy(); } [ClassInterface(ClassInterfaceType.None)] public class P ...
- Delphi调用C# 编写dll动态库
Delphi调用C# 编写dll动态库 编写C#dll的方法都一样,首先在vs2005中创建一个“类库”项目WZPayDll, using System.Runtime.InteropServices ...
- Delphi 调用C# 编写的DLL方法
近来,因工作需要,必须解决Delphi写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行: 编写C#dll的方法都一样,首先在vs2005中创建一个“ ...
- Delphi 7调用C语言编写的DLL
DLL一定是要C语言导出的符号,也就是extern “C”. 当然,我们都知道DLL调用分为动态调用和静态调用. 动态调用的一般思想为,先LoadLibrary那个你想加载的DLL,然后通过GetPr ...
- Delphi 使用之dll文件生成与调用
DLL是Dynamic-Link Libraries(动态链接库)的缩写,库里面是一些可执行的模块以及资源(如位图.图标等).可以认为DLL和EXE基本上是一回事,只是DLL不能直接执行,而必须由应用 ...
- Delphi 中的DLL 封装和调用对象技术(刘艺,有截图)
Delphi 中的DLL 封装和调用对象技术本文刊登2003 年10 月份出版的Dr.Dobb's 软件研发第3 期刘 艺摘 要DLL 是一种应用最为广泛的动态链接技术但是由于在DLL 中封装和调用对 ...
- Java调用C/C++编写的第三方dll动态链接库(zz)
这里主要用的方法是JNI.在网上查资料时看到很多人说用JNI非常的复杂,不仅要看很多的文档,而且要非常熟悉C/C++编程.恐怕有很多人在看到诸如此类的评论时已经决定绕道用其他方法了.本文将做详细的介绍 ...
- 关于在VB.NET中调用使用VC++编写的类库dll的一点笔记
前言 结对作业要求一出来,我就立刻想到了把“计算核心”封装成dll,然后使用vb.net编写UI调用dll的思路.然而在实现过程中却遇到了很多的问题. 我在这个过程中是负责使用vb.net编写UI并调 ...
随机推荐
- 【linux】打包压缩命令
打包命令:tar\zip 压缩命令:gzip 打包文件 tar -zcvf xxx/ tar -xvf xxx.tar z的意思是通过gzip压缩 c是create是生成打包的意思,x是解包 v是压缩 ...
- 使用Python 2.7实现的垃圾短信识别器
最近参加比赛,写了一个垃圾短信识别器,在这里做一下记录. 官方提供的数据是csv文件,其中训练集有80万条数据,测试集有20万条数据,训练集的格式为:行号 标记(0为普通短信,1为垃圾短信) 短信内容 ...
- maven打的包中含源文件jar包
如何用maven package打的jar包中还包含源文件(resource)jar包: 在pom中如下添加: <build> <plugins> <plugin> ...
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 activation-group& dialect& date-effective
activation-group 该属性将若干个规则划分成一个组,统一命名.在执行的时候,具有相同activation-group 属性的规则中只要有一个被执行,其它的规则都不再执行.可以用类似sal ...
- (三十八)js之柯里化
先给大家介绍什么是柯里化与反柯里化 百度翻译: 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的 ...
- 没有绝对的cc.ResolutionPolicy.FIXED_WIDTH或cc.ResolutionPolicy.FIXED_HEIGHT
以做cocos手游的经验来说,为了保证游戏在各种尺寸屏幕完美展现,没有黑边,没有非等比缩放,所以基本上适配机制都是都是cc.ResolutionPolicy.FIXED_WIDTH或cc.Resolu ...
- HDU2032 杨辉三角
解题思路:不要小看这题水题,如果数据类型没有用long long, 当n开为35时,会出现TLE,而且会报非法内存访问,现在还 不理解为什么,若有高手,请不吝赐教. 上代码: #include< ...
- 剑指offer-第四章解决面试题思路(二叉收索树和双向链表)
题目:输入一个二叉收索树,将二叉搜索树转换成排序的双向链表.要求不能创建节点,只能将链表中的指针进行改变. 将复杂的问题简单化:思路:二叉收索树,本身是一个排序结构,中序遍历二叉收索树就可以得到一组排 ...
- SCARA——OpenGL入门学习一、二
参考博客:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 简介 最近开始一个机械手臂的安装调试,平面关节型机器人又称SCA ...
- 窗口玻璃特效,半透明窗口,使用DWM实现Aero Glass效果
转自:http://blog.csdn.net/ntwilford/article/details/5656633 从Windows Vista开始,Aero Glass效果被应用在了Home Pre ...