delphi dll 源码:

library dllres;

  type
char10 = array[..] of char;
TMydata = packed record
id: Integer;
name: char10;
married: Boolean;
salary: Double;
end;
PMydata = ^TMydata; const
RESSTR: array[..] of string = ('HELLO', 'COLOR', 'DELPHI', 'shared', 'library');
NO_RESULT= 'no result';
var
mydata: TMydata; {$R *.res}
// 返回字符串指针
function getResStr(aindex: Integer): PChar; stdcall;
begin
if aindex < Length(RESSTR) then
begin
Result := pchar(RESSTR[aindex]);
end
else
begin
Result := pchar(NO_RESULT);
end;
end; // 返回结构体指针
function getMydata: PMydata; stdcall;
begin
with mydata do
begin
id := ;
name := 'obama';
married := false;
salary := ;
end;
Result := @mydata;
end; exports getResStr, getMydata; begin
end.

C# 调用示例:

    class Invoke_Delphi_Dll_Exam
{
[DllImport("dllres.dll", CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr getResStr(int index); [DllImport("dllres.dll", CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr getMydata(); public struct Mydata
{
public int id; //
public string name; //
public bool married; //
public double salary; // public Mydata(byte[] data)
{
if (data != null && data.Length == ) {
id = BitConverter.ToInt32(data, );
name = Encoding.Unicode.GetString(data, , ).Replace("\0",""); // 去掉尾部的0字符
married = BitConverter.ToBoolean(data, );
salary = BitConverter.ToDouble(data, );
}
else {
id = ;
name = String.Empty;
married = false;
salary = ;
}
} public override string ToString()
{
return String.Format("id: {0}, name: {1}, married: {2}, salary: {3}",
id, name, married, salary);
}
} private static void Main(string[] args)
{
Console.WriteLine(Marshal.PtrToStringAuto(getResStr())); byte[] data = new byte[];
Marshal.Copy(getMydata(), data, , );
Mydata mydata = new Mydata(data);
Console.WriteLine(mydata);
}
}

C# 调用Delphi dll的更多相关文章

  1. 在.net中调用Delphi dll的Pchar转换

    Pchar是非托管代码,要在.net中调用Delphi dll中的功能,请使用MarshalAs属性告知.net调用PInvoke去转换.net中标准的string类型.如果Delphi dll是De ...

  2. vb6如何调用delphi DLL中的函数并返回字符串?

    1,问题描述 最近发现vb6调用delphi DLL中的函数并返回字符串时出现问题,有时正常,有时出现?号,有时干脆导致VB程序退出 -- :: 将金额数字转化为可读的语音文字:1转化为1元 ???? ...

  3. Visual Studio 调用 Delphi DLL 会退出的解决方案

    新写了一个 Delphi 的 dll 供 C# 程序调用,却发现在使用 Visual Studio 2012 进行调试时,程序会在调用后自动退出. 经过对比,只需要将工程属性中“调试”一页下的“启用 ...

  4. C#调用Delphi DLL获取字符串(C# IntPtr 与 string互转 )

    前因后果 调用一门锁的dll实现读取酒店IC卡数据,直接用Readme里的方法出错. 函数声明: 一.读卡函数    ************************ Delphi 调用 ****** ...

  5. VC调用Delphi DLL

    别的没什么,是一定可以调用成功的.但是意外的是,ShowMessage函数在DLL里也可以轻易被调用.此外,Delphi里的var 相当于VC里的引用,需要在函数原型里正确标识,否则传递普通变量甚至常 ...

  6. C#调用Delphi Dll返回字符串的示例(使用Move才能拷贝字符串)

    //----------------------Delphi------------------- procedure GetSqlData(ASource: PChar; ADest: PChar; ...

  7. Delphi DLL的创建、静态及动态调用

    转载:http://blog.csdn.net/welcome000yy/article/details/7905463 结合这篇博客:http://www.cnblogs.com/xumenger/ ...

  8. VS2017写的exe调用Delphi 7写的DLL

    公司有个很古老的系统,代码量很大,并且稳定线上运行10几年,这系统是公司的核心,公司收入基本靠它,系统几乎都是Delphi 7写的,要重写是不可能的.因为Delphi 7编译出来的DLL默认的导出符号 ...

  9. C#调用Delphi的dll之详解

    C#调用Delphi接口方法,有两种解决办法: 一.将Delphi程序编译成一个COM组件,然后在C#里引用COM组件. 二.非托管调用Dephi的DLL文件. 这里我们主要讲解一下第二种方法,讲第二 ...

随机推荐

  1. mongodb与SQL常见语句对照

    inert into users value(3,5) db.users.insert({a:3,b:5})     select a,b from users db.users.find({}, { ...

  2. 根据插件Swipe,结合jQuery封装成的新的jQuery插件

    swipe支持电脑上的自动滑动,也支持手机端的滑动效果.但是每次调用只能支持一个效果或者说一个页面出现n个这样的效果,我们就得调用n次这个插件. 我使用swipe+jQuery使得swip变得方便使用 ...

  3. springcloud(八) Hystrix监控

    一.Feign项目Hystrix自带的监控 在feign项目pom.xml 添加: <!-- 1,使用 Hystrix的模块 hystrix-metrics-event-stream,就可将这些 ...

  4. windows中dos命令指南

    CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统版本)chcp 修改默认字符集chcp 936默认中文chcp 650011. appwiz.c ...

  5. leetcode507

    public class Solution { public bool CheckPerfectNumber(int num) { ) { return false; } ; ; i <= nu ...

  6. Python新利器之pipenv(转)

    pipenv 都包含什么? pipenv 是 Pipfile 主要倡导者.requests 作者 Kenneth Reitz 写的一个命令行工具,主要包含了Pipfile.pip.click.requ ...

  7. sql 存储过程返回值 变量名

    return 语句返回值,前台调用的参数名称为 @RETURN_VALUE

  8. 怎么改变Eclipse中项目的运行服务器

    eclipse中-->选定项目-->右键-->弹出 Properties for项目名 -->选择server子项-->选择需要的server即可(Always use ...

  9. web api的新玩法

    前言: 目前大多数的.net core 项目的web api 都是用的json作为数据传输格式,或者说几乎是所有的都是,可是有没有想过换一种数据传输格式怎么处理,比如XML,或者谷歌首推的Protob ...

  10. Go Packages、Variables、functions

    [Go Packages.Variables.functions] 1.定义包名. 2.引入Package. 3.定义导出的变量.首字母必须大写. 4.函数.Notice that the type ...