Delphi调用C#动态链接库DLL(摘自网络)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Delphi调用C#动态链接库DLL(摘自网络),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2370字,纯文字阅读大概需要4分钟。
内容图文
实现步骤
:
1
、生成密钥文件用于给程序集强名称签名
(
必须
)
sn -k MyKey.snk
2
、使用强名称签名的
Key
编译成类库
Tester.DLL
csc /t:library /keyfile:MyKey.snk Tester.cs
3
、生成类型库
(
此
tlb
文件提供给
Delphi
导入
,
使用
OLE
方式调用此步可省略了
)
tlbexp Tester.dll /out:Tester.tlb
4
、生成注册
DLL
的注册表文件
regasm Tester.DLL /regfile:Tester.reg
5
、运行
Tester.reg
将上面四个步骤打包成一个
BAT
文件自动生成
DLL,
在运行
Delphi
程序前请先运行
Tester.reg
注册
COM.
打包
Installer,Setup.exe
别忘记打包第
5
步
.
reg.bat
文件内容
:
sn -k MyKey.snk
csc /t:library /keyfile:MyKey.snk Tester.cs
tlbexp Tester.dll /out:Tester.tlb
regasm Tester.DLL /regfile:Tester.reg
且看运行效果
:
Delphi
程序
Project1.exe (
图片中英文拼写错误
,
不想改了,
sorry!)
点
Call DLL
按钮成功打开
.Net
窗体,测试通过
!
注意
:
开发环境中必须在
Visual Studio 2008
命令提示中运行
reg.bat!!!
如下图
:
两种可能的错误提示及解决方案:
1.
出现以下提示说明没有注册
COM
组件
,
请运行
Tester.reg.
2.
出现以下提示说明您调用了一个没有签名的
.Net
方法
(
无参方法
)
C# Code:
/// <summary>
///
测试类
.
请给所有方法提供一个参数
,
即使是无用的签名
/// </summary>
public
class
Tester
{
public
string
GetMyKey(
int
param)
{
return
"Key:www.csframework.com";
}
public
string
GetMyName(
string
input)
{
return
"Jonny Sun" ":" input;
}
public
int
GetMyAge(
string
yourName)
{
return
33;
}
/// <summary>
///
显示消息并打开窗体
/// </summary>
/// <param name="msg">
消息
</param>
/// <returns></returns>
public
int
ShowMessage(
string
msg)
{
MessageBox.Show(msg);
frmTest.Execute(msg);
//
打开窗体
return
100;
}
/// <summary>
///
无签名
(
参数
)
的方法给
Delphi
调用,调用失败,
Delphi
程序会抛出异常。
/// </summary>
/// <returns></returns>
public
int
CallMethodWithNoSign()
{
return
-1;
}
}
Delphi Code:
procedure TForm1.Button1Click(Sender: TObject);
var
OBJ: Variant; //OLEVariant Type.
ResultValue: string; //Value returned from C#
i:Integer;//Value returned from C#
begin
try
try
OBJ := CreateOleObject(‘Dll4DelphiCall.Tester‘);
//Test a function with signature.
ResultValue := OBJ.GetMyName(‘HELLO!C/S
框架网
www.csframework.com‘
);
ShowMessage(ResultValue);
ResultValue := OBJ.GetMyAge(‘JONNY!‘);
ShowMessage(ResultValue);
ResultValue := OBJ.GetMyKey(0);
ShowMessage(ResultValue);
i:=OBJ.ShowMessage(‘Call CSharpWindow....(Sender:Delphi Form)‘);
ShowMessage(VarToStr(i));//Show result ID fromC# function.
except
on e: Exception do
begin
ShowMessage(e.Message);
end;
end;
finally
OBJ := Unassigned;
end;
end;
本文出自 “畅想天空” 博客,请务必保留此出处http://kinwar.blog.51cto.com/3723399/1617588
原文:http://kinwar.blog.51cto.com/3723399/1617588
内容总结
以上是互联网集市为您收集整理的Delphi调用C#动态链接库DLL(摘自网络)全部内容,希望文章能够帮你解决Delphi调用C#动态链接库DLL(摘自网络)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。