在Delphi5中向包装好的c#dll发送位图
我使用Delphi5。我们需要使用不提供COM互操作性的库与第三方硬件进行通信。经过一点研究;我为库制作了一个包装器,能够加载它并使用in-out软件。(感谢有类似问题的其他成员) 除了一个电话之外,一切都正常。它接收位图并将其添加到收据对象以进行打印在Delphi5中向包装好的c#dll发送位图,c#,delphi,dll,bitmap,wrapper,C#,Delphi,Dll,Bitmap,Wrapper,我使用Delphi5。我们需要使用不提供COM互操作性的库与第三方硬件进行通信。经过一点研究;我为库制作了一个包装器,能够加载它并使用in-out软件。(感谢有类似问题的其他成员) 除了一个电话之外,一切都正常。它接收位图并将其添加到收据对象以进行打印 public void ReceiptAddImageLine(Bitmap imgImage) { recReceipt.addLine(new ReceiptImageLine(imgImage)); } (C
public void ReceiptAddImageLine(Bitmap imgImage)
{
recReceipt.addLine(new ReceiptImageLine(imgImage));
} (C# wrapper)
调用该过程并传递TBitmap时,在尝试编译时出现以下错误:
“[错误]repreceipt.pas(2461):不兼容的类型:“_Bitmap”和“TBitmap”
以下是实际通话:
prPrinter.ReceiptAddImageLine(qriCode.Picture.Bitmap); (Delphi 5 call)
如前所述,所有其他包装过程调用都可以正常工作,没有任何问题。我知道这可能只是一个简单的类型转换错误,但我似乎无法找到我做错了什么以及如何解决这个问题
我正在以库类型加载dll
提前感谢您的帮助 当然,您不能期望C#
位图
与DelphiTBitmap
二进制兼容?您需要传递一个HBITMAP
。在Delphi端,使用ReleaseHandle
获取HBITMAP
。在C侧,它将是Image.FromHbitmap
。出于互操作的目的,它是IntPtr
,从图像的签名可以明显看出。从hbitmap
。很难解释为什么我真的期望这样,却从未看到明显的错误。这很有道理。谢谢你,大卫。