delphi7.0调用C#编写的dll文件! 大侠们帮忙看一下!
我用C#编写了一个计算两个整型数的求和程序,之后编译成DLL文件,用DELPHI进行调用
但是出现以下的警告!
应用程序正常初始化(0xc000007b)失败。请单击"确定",终止应用程序。
我的C#程序是:
public class Add
{
public int add(int i, int j)
{
return(i+j);
}
}
DELPHI程序为:
var
Form1: TForm1;
function add(a :longint;b :longint):longint;cdecl;external 'add.dll';
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
a :longint;
b :longint;
c :longint;
begin
a :=strtoint(e1.Text);
b :=strtoint(e2.Text);
c:=add(a,b);
e3.Text :=inttostr(c);
end;
end.
由于C# 中int型的范围是-2,147,483,648 到 2,147,483,647
所以在delphi里应用了长整型变量longint
生成dll文件后在C:\Program Files\Borland\Delphi7\Lib\Debug文件下引入此文件,但还是出现
“应用程序正常初始化(0xc000007b)失败。请单击"确定",终止应用程序。”的情况
问题点数:20、回复次数:13Top
1 楼keiy()回复于 2006-09-14 20:44:17 得分 2
http://community.csdn.net/Expert/topic/4879/4879484.xml?temp=.5786249
Top
2 楼cjkxuejf(sandy)回复于 2006-09-18 17:00:33 得分 5
delphi7.0 不能这样调用的啊!!c#的dll文件 和以前的dll文件的生成方式是不一样的.c#的dll文件可以简单的说成就是个域名单元文件. 这样就不符合delphi7.0调用dll文件的类型Top
3 楼wangzh2006()回复于 2006-09-19 21:05:42 得分 0
那么要进行调用应该如何处理呢?Top
4 楼agui(阿贵: 高级图形用户界面)回复于 2006-09-21 23:27:43 得分 5
C#编译的DLL是.NET的Assembly,不是WIN32的DLL,因此D7编译的程序(以及所有的WIN32程序)不能调用它(至少不能直接调用),只能是.NET程序调用。你可以用C/C++编那个DLL,或者用Delphi来编。
(另外,从C#的角度来看 add 是类Add的非静态函数,即使用.NET程序来调用Add.add也需要先new一个Add对象才能调用add。)
Top
5 楼DelphiGuy()回复于 2006-09-21 23:33:37 得分 5
.NET Assembly也是可以直接被Win32 APP调用的,只要生成unmanaged exports就可以了。
目前.net的开发工具中,只有MC++和Delphi能够生成这种引出。
Top
6 楼surefire()回复于 2006-09-26 07:52:35 得分 0
是不是机器没有安装.Net Frame?Top
7 楼hdt(倦怠)回复于 2006-09-26 08:01:34 得分 3
给C#做个com封装
具体参考
ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconexposingnetframeworkcomponentstocom.htmTop
8 楼wangzh2006()回复于 2006-09-28 17:46:01 得分 0
我所做的项目的一部分要求使用c#进行,但是需要与其他部分用delphi编的进行调用。
Top
9 楼wangzh2006()回复于 2006-09-28 17:47:35 得分 0
现在我用的语言是visualc#2005Top
10 楼DelphiGuy()回复于 2006-09-28 17:56:46 得分 0
必须从Win32程序中调用吗?
那你就要用Delphi.net或者MC++把这个DLL重新封装一下,生成unmanaged exports才行。
Top
11 楼agui(阿贵: 高级图形用户界面)回复于 2006-09-28 19:14:33 得分 0
你研究一下搜索的结果吧:
"calling .net" "from Win32"
http://www.google.com/search?num=50&hl=en&lr=lang_zh-CN%7Clang_zh-TW%7Clang_en&newwindow=1&safe=off&q=%22calling+.net%22+%22from+Win32%22&btnG=Search&lr=lang_zh-CN%7Clang_zh-TW%7Clang_en
"Inverse P/Invoke"
http://www.google.com/search?hl=zh-CN&q=%22Inverse+P%2FInvoke%22&btnG=Google+%E6%90%9C%E7%B4%A2&lr=lang_zh-CN%7Clang_zh-TW%7Clang_en
Top
12 楼wangzh2006()回复于 2006-10-02 10:33:55 得分 0
多谢 各位大侠了!
小弟研究一下上述方法!
多谢多谢!Top
13 楼wangzh2006()回复于 2006-10-08 16:20:02 得分 0
我改变了dll的属性ComVisible为true,但是还不能进行调用。
请问,如果通过com组件进行调用应该如何进行?
小弟先谢了Top




