社区
C#
帖子详情
DELPHI编写的DLL用C#如何调用
山东蓝鸟贵薪
2011-08-31 05:54:22
DELPHI编写的DLL用C#如何调用
...全文
455
25
打赏
收藏
DELPHI编写的DLL用C#如何调用
DELPHI编写的DLL用C#如何调用
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
山东蓝鸟贵薪
2011-09-12
打赏
举报
回复
我用C#重新编写了一个 封装图片功能的DLL,
解决了这个问题
山东蓝鸟贵薪
2011-09-08
打赏
举报
回复
谢谢赐教,我再找找原因...........
mjp1234airen4385
2011-09-08
打赏
举报
回复
另外在delphi里写动态库,不要使用string。
因为delphi中string是delphi自定义的一种数据类型。
大多数编程语言不支持。
使用WideString或PChar
mjp1234airen4385
2011-09-08
打赏
举报
回复
因为,C#中没有TImage这个类型,所以没有办法给你传送参数。
可以改为Bitmap的,这个在C#里Delphi里都支持。
delphi里:
function RandomDPR_text(img:HBITMAP):WideString;stdcall; // 定义随机码
C#里:
string RandomDPR_text(IntPtr img);
调用:
Bitmap bmp = new Bitmap();
...
string Result = RandomDPR_text(bmp.Handle);
山东蓝鸟贵薪
2011-09-08
打赏
举报
回复
真晕,我用C#重新编写了一个DLL,再用C#程序加载即可
但是这个实例还是不行呀
sdl2005lyx
2011-09-07
打赏
举报
回复
楼主,我和# qldsrx(青龙白虎)解释已经还不清楚吗?你怎么还没弄懂啊?
你可以到MSDN,百度、谷歌搜索,也可以弄明白这个问题啊。。。。
兔子-顾问
2011-09-07
打赏
举报
回复
p/invoke
类似系统api,做c导出函数
山东蓝鸟贵薪
2011-09-04
打赏
举报
回复
你的意思我明白呀,但是我说的是如何将这个DELPHI的代码如下:
DLL定义的函数体结构如下:
function RandomDPR_text(img:Timage):string;stdcall; // 定义随机码
var
//定义变量
begin
result:=pwdimgstr;
end;
exports RandomDPR_text;
begin
end.
修改成要是用C#调用这个DLL时,也能识别的代码
andyqq8
2011-09-04
打赏
举报
回复
C#不知道Timage是啥东西,所以无法调用Timage。。。。楼主这样够通俗了吧?
qldsrx
2011-09-04
打赏
举报
回复
[Quote=引用 10 楼 sgzhou12345 的回复:]
这样 通用化的DLL,任何开发语言都能调用是吧
[/Quote]
说得易懂点,当不同的开发语言之间要调用对方的函数,传递参数时,计算机最终收到的是二进制数据,也就是字节数组,无论是结构体还是类,都是以二进制数据传输的。因此通用化的DLL,参数应该是基本数据类型(INT,FLOAT,DOUBLE,BOOL等)或者byte[],如果用结构体,还必须给出结构体声明,双方构造。像你这种特殊的Timage是不能用在他人调用上的,你要改为TByte后,自己在DELPHI中,根据TBbyte重建Timage,C#可不知道如何建那个Timage类型。
山东蓝鸟贵薪
2011-09-02
打赏
举报
回复
这样 通用化的DLL,任何开发语言都能调用是吧
sdl2005lyx
2011-09-01
打赏
举报
回复
你在
RandomDPR_text(byte buffer[] ,int size)
{
img:Timage =(Timage )buffer; //这个在Delphi怎么转换,我没用过Delphi,你肯定知道
RandomDPR_tex(img); //调用你原来的方法;
}
sdl2005lyx
2011-09-01
打赏
举报
回复
因为Image是每个开发平台自己的类,不能通用,必须在参数封送是转成它们都能识别的东西!
“我这个是一个参数”,楼主,我不是说了吗,你要做DELPHI重新写个方法,在新方法里调用你原来的方法,明白没有?
函数接口可以做成这样:
RandomDPR_text(byte buffer[] ,int size); //这样更直观
对应C#:
RandomDPR_text([In,Out]byte[] buffer,int size);
山东蓝鸟贵薪
2011-09-01
打赏
举报
回复
function RandomDPR_text(img:Timage):string;stdcall; // 定义随机码
我这个是一个参数呀,在C#中用两个参数好用吗??????
sdl2005lyx
2011-09-01
打赏
举报
回复
楼主,非基本类型,都要经过一次处理,变成标准的类型(如:bool ,byte,short,int,double,char*等),才能满足平台调用的要求!
你的函数参数img:Timage,是非标准类型,你要在外层包装,用缓冲区方式:
RandomDPR_text(void* buffer,int size);//DELPHI语法不熟,用C++方式给你范例。
对应C#:
RandomDPR_text(IntPtr buffer,int size);
山东蓝鸟贵薪
2011-09-01
打赏
举报
回复
谢谢赐教,我现在用DELPHI写了一个DLL函数体,
DLL定义的函数体结构如下:
function RandomDPR_text(img:Timage):string;stdcall; // 定义随机码
var
//定义变量
begin
result:=pwdimgstr;
end;
exports RandomDPR_text;
begin
end.
要是用C#调用这个DLL时,如何在C#中写代码
qldsrx
2011-09-01
打赏
举报
回复
编写的DLL不符合通用化标准,无法给其它语言程序调用,完毕!
sdl2005lyx
2011-09-01
打赏
举报
回复
还没看懂啊,楼主!这要跟你说吧:
你的img:Timage这个参数,C#里肯定不能识别,那怎么办呢?
就是想个变通的办法,把这个参数换成两边都能接受的形式,
用void* ,用byte[],都是解决的办法,因为对不同的开发平台,
Image对象都要相应的方法与void*或byte[]进行转换!
这下你明白没有!!!!
sdl2005lyx
2011-08-31
打赏
举报
回复
delphi:
function SetIPAddress(var lpszIPAddress: WideString; dwPortNumber: Integer; dwPassWord: Integer): WordBool;
C#:
[DllImport("xxxx.dll", CharSet=CharSet.Ansi)]
public static extern bool SetIPAddress(string lpszIPAddress, int dwPortNumber, int dwPassWord);
C#
调用
Delphi
编写
的
Dll
文件
该例主要实现,在C#中
调用
Delphi
编写
的
Dll
文件。
C#
调用
Delphi
编写
的非托管
Dll
的例子源程序
C#
调用
Delphi
编写
的非托管
Dll
的例子源程序。my
dll
.
dll
是使用
delphi
编写
的,参数均为Pchar型。
Delphi
XE10安卓开发(实战篇)
实战方式讲解
Delphi
XE10的安卓开发,从安卓开发开发环境配置开始讲解,实战讲解如何使用FMX进行安卓开发,App的创建,调试,UI设计、让学员快速入门
Delphi
安卓App的开发
VC++/
Delphi
编写
动态连接库 含测试用例
C#
调用
VC++/
Delphi
DLL
(含源代码和部分注释)
VC++/
Delphi
编写
动态连接库 含测试用例
C#
调用
VC++/
Delphi
DLL
(含源代码) 小巧可用,源码已经调试通过,含部分注释 适合
dll
编程的入门人员 有不住之处,希望各位海涵!
用Visual
C#
做
DLL
文件
作为软件设计和开发人员大都有过使用
DLL
(动态连接库)的经历,
DLL
的产生使得我们的应用程序在可维护性、代码的重复使用等方面都有了很大的提高。以前用的
DLL
一般都是用Visual C++、
Delphi
或者VB等编程语言来
编写
的,这种
DLL
的
编写
和使用,我们大都已经比较习惯了。作为新一代的程序开发语言--Visual
C#
,到底是如何
编写
和使用
DLL
的呢!本文就试着就这方面的问题来进行简单的介绍。......
C#
110,534
社区成员
642,575
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章