如何将位图传递给Delphi在C#中编写的dll?

Moh*_*deh 4 c# delphi dll image bitmap

我在这样写的dll中有一个Delphi函数:

       function LensFlare(Bitmap: TBitmap; X, Y: Int32; Brightness: Real): TBitmap; StdCall;
       Begin
         // ...
         Result := Bitmap;
       End;
Run Code Online (Sandbox Code Playgroud)

我想在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!
    }
Run Code Online (Sandbox Code Playgroud)

错误:"尝试读取或写入受保护的内存.这通常表示其他内存已损坏."

我怎样才能做到这一点?

Dav*_*nan 5

你不能使用这个功能.除非你使用软件包,否则在两个Delphi模块之间使用它甚至都不安全.你不能像这样在模块边界传递本机Delphi类.

您需要切换到互操作友好类型.显而易见的选择是使用HBITMAP.您需要修改Delphi库.如果您没有源,则需要联系原始开发人员.