|
|
1
13
你很可能不会有任何运气。tstringlist不仅仅是一个数组,它是一个完整的类,具体的实现细节可能与.NET不同。看看DelphiVCL源代码(也就是说,如果你有它的话),试着找出你是否可以在C中重建类,并在你最好的朋友interop marshaller的帮助下传递它。请注意,即使Delphi字符串类型与.NET字符串类型也不同,并且在传递它时不告诉封送处理程序他应该做什么,很可能他会将它作为char数组传递。 除此之外,我建议更改delphi dll。在非Delphi客户机使用的dll中公开任何特定于Delphi的内容从来不是一件好事。将参数设为pchar数组,这样就可以了。 |
|
|
2
2
如果这是您的dll,我将重写函数以接受字符串数组。避免将类作为dll参数传递。 或者,如果你 真的? 出于某种原因,想要使用tstringlist,Delphi的vcl.net可以从任何.NET语言中使用。 使用tinifile的旧示例: http://cc.codegear.com/Item/22691 该示例在Delphi2005中使用.NET 1.1。Delphi 2006和2007支持.NET 2.0。 |
|
|
3
1
如果您不控制DLL,并且它们不能或不会更改它,那么您总是可以在一个单独的DLL中编写自己的Delphi包装器,其中的参数更加跨语言友好。 将类作为dll函数的参数是不正确的形式。 |
|
|
4
0
我不太清楚你使用delphi和c的方式。您似乎创建了一个要从C_调用的win32 dll。当然,你一定是在用宾沃克。 我建议您使用源代码创建.NET DLL,因为VCL的完整端口可用。如果你愿意的话,我可以再详细说明一下…… |
|
|
5
0
理论上,你 能够 通过使用指针(将它们强制转换为c intptr类型)而不是强类型的对象引用(或者将它们包装在其他类型中以避免声明不安全的块),可以做到这一点,但最重要的一点是:delphi运行时必须是为对象分配和释放内存的机制。为此,必须在Delphi编译的dll中声明函数,该dll调用tstringlist类的构造函数和析构函数,必须确保Delphi dll使用sharemem单元,并且必须在Delphi注册表离开dll和输入后,最好也作为从DelphiDLL导出的函数。 简而言之,这是一个 许多 因为您必须在同一进程中同时处理两个内存管理器(.NET CLR和Delphi的分配器),并且必须手动管理内存。 和 “愚弄”Delphi内存管理器和运行时。是否有特定原因将您绑定到此设置?你能描述一下你想在更高层次上解决的问题吗? |
|
|
6
0
正如Hemant Jangid所说,通过将代码编译为.NET DLL,然后在C项目中引用该程序集,您应该能够轻松地做到这一点。 当然,只有在Delphi.net版本中有Delphi.net的情况下,您才能这样做。 |
|
|
7
0
我对C不太了解,但我用于跨上下文传输字符串列表的技术是使用.text属性获取表示列表的字符串,然后在“另一面”上分配该属性。 通常在墙上挂一根绳子比较容易,因为它是一个完全爆炸的物体。 |