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);
}
}

最新文章

  1. Cannot create file &quot;C:\Users\Administrator\AppData\Local\Temp\EditorLineEnds.ttr&quot;
  2. 如何退出调起多个Activity的Application?
  3. CMD窗口如何调整大小 / 颜色
  4. [译] EXTENDING JQUERY &ndash; 2.2 A simple plugin
  5. redis集群部署之codis 维护脚本
  6. 给指针malloc分配空间后就等于数组吗?
  7. 解决VS2012【加载......符号缓慢】的问题
  8. EF4 Code First和EF6 Code First链接mysql的方法
  9. XSS完全解决方案
  10. svg 五花 元辅音 助读器
  11. 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
  12. phothoshop 快捷键
  13. PHP运行脚本
  14. Ubuntu16.04 Arduino UNO R3开发板
  15. Java输出字符串格式问题 .UnknownFormatConversionException
  16. Java -- 获取MAC地址
  17. LCD1602小程序
  18. java_方法
  19. [hdu 4417]树状数组+离散化+离线处理
  20. linux 进程间通信机制(IPC机制)一消息队列

热门文章

  1. mysql如何处理外码约束
  2. Maven 创建java Web项目,配置Spring,CXF
  3. Restful&amp;RestSharp
  4. bootstrap的datetimepicker.js的结束时间大于开始时间,当前日期之前的代码
  5. leetcode814
  6. leetcode414
  7. Nginx rewrite使用
  8. JAVA_02
  9. xdebug php
  10. 【331】python 下载文件:wget / urllib