大家好,Delphi2006与C#结合使用的问题!!!!(100分)

  • 主题发起人 主题发起人 yjpya
  • 开始时间 开始时间
Y

yjpya

Unregistered / Unconfirmed
GUEST, unregistred user!
我在Delphi2006中写了一个简单的程序,作了一个Delphi for .net projects中的library
然后用vs.net 中的 C#调用。在Delphi中,我只写了一个数据库Open,Close,和取出所有数据返回到的方法。然后在C#中取出所有记录,显示。
可是我在C#引用的时候,在变量声明部分写了private Library1.Units.Library1 library;
然后在按钮中写了一句
Library1.Units.Library1 library = new Library1.Units.Library1();
可是编译时出现。“类型Library1.Units.Library1未定义构造函数”的错误。
可是在Delphi 的Library中不能写构造函数呀。不知如何可以解决,怎样在.net中调用
Delphi。
如果方便,请将解决方法发送到邮箱:52LKB@163.com中
请各位指教!!
 
我想你的问题不是结合使用的问题,而是如何调用程序集的问题!
我看到你提到了在C#中引用了该DLL,问题是你的使用方法不对啊!
你所谓的Delphi2006与C#结合使用其实就是微软所标榜的跨语言特性,但是跨语言的前提是你使用这些语言所编写的SOURCE都用的是CLR的东西,没有用到各个语言的特别的东西,比如C#支持指针,而VB不支持,你就不可以在二者的调用中定义指针!
再者,你引用进来之后,你要知道library不是一个类,如何可以New呢,他其实相当于C#中以DLL结尾的程序集,所以你要使用他中间的类,必须象使用System.text那样using来名称空间,然后实例化Library1.Units.Library1中的类,才可以使用!
 
to:网事如风
我觉得您对程序编写理解有误,对于做项目,可能用到多种语言,我只是不同的功能,能用最快的方法来实现,其次library ,是Library1.Units.Library1的一个对象,并不是想您理解的一个类。
而我做这个DEMO的意思是,想测试一下D2006与.net是否真的可以实现无缝连接,至于其它的,比如您说的指针之类的定义,在不同的语言有不同的表现方式,不管D,C,JAVA甚至是VB,不是说没有指针,而且用了其它的形式实现的指针的功能。至于这些我想我目前还不想考虑,因为还不到那一步,它已经由语言自行封状。如果说,让您调用这个DLL,该如何实现?这是我最关心的问题。
谢谢你的帮助!~~~~~~
 
Delphi 的Library中不能写构造函数?????
 
对呀!
里面可以写吗?你测试一下,肯定不能通过。
 
// Notes:
// (*) If no key is specified, the assembly is not signed.
// (*) KeyName refers to a key that has been installed in the Crypto Service
// Provider (CSP) on your machine. KeyFile refers to a file which contains
// a key.
// (*) If the KeyFile and the KeyName values are both specified, the
// following processing occurs:
// (1) If the KeyName can be found in the CSP, that key is used.
// (2) If the KeyNamedo
es not exist and the KeyFiledo
es exist, the key
// in the KeyFile is installed into the CSP and used.
// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
// When specifying the KeyFile, the location of the KeyFile should be
// relative to the project output directory. For example, if your KeyFile is
// located in the project directory, you would specify the AssemblyKeyFile
// attribute as [assembly: AssemblyKeyFile('mykey.snk')], provided your output
// directory is the project directory (the default).
// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
// do
cumentation for more information on this.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile('')]
[assembly: AssemblyKeyName('')]
//
// Use the attributes below to control the COM visibility of your assembly. By
// default the entire assembly is visible to COM. Setting ComVisible to false
// is the recommended default for your assembly. To then
expose a class and interface
// to COM set ComVisible to true on each one. It is also recommended to add a
// Guid attribute.
//
[assembly: ComVisible(False)]
//[assembly: Guid('')]
//[assembly: TypeLibVersion(1, 0)]
procedure Open;
begin
DataModule1.ADOQuery1.Open;
end;

procedure Close;
begin
DataModule1.ADOQuery1.Close;
end;
procedure GetRec(arrRec: array of string);
var
iCount: Integer;
begin
DataModule1.ADOQuery1.First;
for iCount := 0 to DataModule1.ADOQuery1.RecordCount - 1do
begin
arrRec[iCount] := DataModule1.ADOQuery1.FieldByName('UserName').AsString;
DataModule1.ADOQuery1.Next;
end;
end;

begin

end.
这是D中的全部代码
 
我用delphi2005和C#做过同样的一个东东儿,没有什么问题,delphi编译后的.dll在reference中引用,调用的时候将会自动显示里面的功能函数,具体你试试就知道了.
 
后退
顶部