作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在这样的 dll 中有一个 Delphi 函数:
function LensFlare(Bitmap: TBitmap; X, Y: Int32; Brightness: Real): TBitmap; StdCall;
Begin
// ...
Result := Bitmap;
End;
我想在 C# 中使用它,我已经试过了,但没有成功:
[DllImport("ImageProcessor")]
static extern Bitmap LensFlare(Bitmap bitmap, int x, int y, double Brightness);
private void button1_Click(object sender, EventArgs e)
{
Bitmap b = new Bitmap(@"d:\a.bmp");
pictureBox1.Image = LensFlare(b, 100, 100, 50); // Error!
}
错误:“试图读取或写入 protected 内存。这通常表明其他内存已损坏。”
我该怎么做?
最佳答案
您不能使用此功能。除非您使用包,否则在两个 Delphi 模块之间使用甚至是不安全的。您不能像那样跨模块边界传递 native Delphi 类。
您需要切换到互操作友好的类型。显而易见的选择是使用 HBITMAP
。您将需要修改 Delphi 库。如果您没有源代码,则需要联系原始开发人员。
关于c# - 如何将位图传递给 Delphi 在 C# 中编写的 dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46101335/
我是一名优秀的程序员,十分优秀!