例子

C# Dll:

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics; using System.Runtime.InteropServices; public delegate void ProcessDelegate(long ptr, long len); namespace TestDll
{ public interface ITestClass2
{ void YourProcedure();
void SetDelegate(long ptr);
} [ClassInterface(ClassInterfaceType.None)]
public class Class2 : ITestClass2
{
private ProcessDelegate delProcess = null; public void YourProcedure()
{
Debug.Print("enter");
if (this.delProcess != null)
{
byte[] test = System.Text.Encoding.Default.GetBytes("hello");
GCHandle hObject = GCHandle.Alloc(test, GCHandleType.Pinned);
IntPtr pObject = hObject.AddrOfPinnedObject();
this.delProcess(pObject.ToInt64(), test.Length);
if (hObject.IsAllocated)
hObject.Free();
}
Debug.Print("end");
} public void SetDelegate(long ptr)
{
IntPtr intPrt = new IntPtr(ptr);
delProcess = (ProcessDelegate)Marshal.GetDelegateForFunctionPointer(intPrt, typeof(ProcessDelegate));
} } }

注意的一点 一定要如下设置:

另外, 如果需要导入其他库的话, 项目-->添加引用;

Delphi调用:

首先要注册dll,  命令行至C:\Windows\Microsoft.NET\Framework\v4.0.30319

运行 regasm "你的dll路径\名称.dll"

提示注册成功就可以使用这个dll了

uses ComObj;

procedure callBack(swide: Int64; size: Int64); stdcall;
begin
OutputDebugString(PChar(IntToStr(swide)+':'+ IntToStr(size)));
end; procedure TForm1.btn1Click(Sender: TObject);
var aClass: Variant;
begin
aClass:= CreateOleObject('TestDll.Class2');
aClass.SetDelegate(Dword(@call));
aClass.YourProcedure('test');
end;

示例: 下载地址

Delphi 调用C# DLL(包含委托)的更多相关文章

  1. delphi 调用c#dll

    public interface iProduct { string Buy(); } [ClassInterface(ClassInterfaceType.None)] public class P ...

  2. Delphi 使用之dll文件生成与调用

    DLL是Dynamic-Link Libraries(动态链接库)的缩写,库里面是一些可执行的模块以及资源(如位图.图标等).可以认为DLL和EXE基本上是一回事,只是DLL不能直接执行,而必须由应用 ...

  3. Delphi 中的DLL 封装和调用对象技术(刘艺,有截图)

    Delphi 中的DLL 封装和调用对象技术本文刊登2003 年10 月份出版的Dr.Dobb's 软件研发第3 期刘 艺摘 要DLL 是一种应用最为广泛的动态链接技术但是由于在DLL 中封装和调用对 ...

  4. .net DLL 注册 regasm delphi调用

    .net DLL 注册 regasm regasm regasm myTest.dll regasm.exe 打开vs2005自带的工具“Visual Studio 2005命令提示”,输入上述命令 ...

  5. Delphi XE3写DLL,用Delphi7调用,报错!

    http://bbs.csdn.net/topics/390870532 用delphi xe3写的DLL,delphi7调用,参数都是PAnsiChar,DLL里的函数接收delphi7传的入参,没 ...

  6. Delphi调用C# 编写dll动态库

    Delphi调用C# 编写dll动态库 编写C#dll的方法都一样,首先在vs2005中创建一个“类库”项目WZPayDll, using System.Runtime.InteropServices ...

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

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

  8. Delphi 调用C/C++的Dll(stdcall关键字, 会导致函数名分裂. 此时函数名变成_stdadd@8)

    delphi调用C++写的Dll, 当然这个Dll要求是非MFC的Dll, 这样子才能被delphi调用. 根据C++定义函数的情况, Delphi有不同的相对应的处理方法.1. 声明中不加__std ...

  9. Delphi - Windows系统下,Delphi调用API函数和7z.dll动态库,自动把文件压缩成.tar.gz格式的文件

    项目背景 应欧美客户需求,需要将文件压缩成.tar.gz格式的文件,并上传给客户端SFTP服务器. 你懂的,7-Zip软件的显著特点是文件越大压缩比越高,在Linux系统上相当于我们Windows系统 ...

随机推荐

  1. redis配置主从备份以及主备切换方案配置

    前提:redis中,主从切换场景中,没有绝对的主和从,只有初始化的主和从,然后当主down后,从就变成主了,而主即使连接上,也是从,不会变为主 1.redis-server的主备关系: 需要配置的机器 ...

  2. c# 反射事件

    被反射类中: public delegate void CompeletedHandler(); public static event CompeletedHandler AnalysisCompe ...

  3. java任务调度quartz框架的小例子

    quartz是一个开源的作业调度框架,当然,java可以使用Timer来实现简单任务调度的功能,但Timer是单线程的设计方案,使得一个任务延迟会影响到其他的任务.java也可以使用Scheduled ...

  4. Shell中的判断标志

    測試的標誌 代表意義 1. 關於某個檔名的『檔案類型』判斷,如 test -e filename 表示存在否 -e 該『檔名』是否存在?(常用) -f 該『檔名』是否存在且為檔案(file)?(常用) ...

  5. [LintCode] Min Stack 最小栈

    Implement a stack with min() function, which will return the smallest number in the stack. It should ...

  6. java并发编程:阻塞队列

    一.几种主要的阻塞队列 自从Java 1.5之后,在java.util.concurrent包下提供了若干个阻塞队列,主要有以下几个: ArrayBlockingQueue:基于数组实现的一个阻塞队列 ...

  7. JavaScript、全选反选-课堂笔记

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. mount windows-linux文件共享

    . (2)在linux下访问windows共享: smbclient -L 192.168.2.12 -U admin   //查看共享了那些目录,由此知道主机名为XIAOXING-PC smbcli ...

  9. JacksonUtils.java

    package com.vcredit.framework.utils; import java.io.IOException;import java.util.List; import com.fa ...

  10. kafka综合介绍

    设计目标 高吞吐率.即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输. 支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输 同 ...