Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengakses Kelas C DLL dengan Pembolehubah Ahli dan Kaedah Bukan Statik daripada C#?

Bagaimanakah Saya Boleh Mengakses Kelas C DLL dengan Pembolehubah Ahli dan Kaedah Bukan Statik daripada C#?

Patricia Arquette
Lepaskan: 2024-12-28 21:49:11
asal
167 orang telah melayarinya

How Can I Access a C   DLL Class with Member Variables and Non-Static Methods from C#?

Mengakses Kelas C DLL dalam Kod C#

Masalah:

Menggunakan P/Invoke untuk mengakses fungsi dalam C DLL dengan pembolehubah ahli dan kaedah bukan statik memerlukan mencipta contoh kelas penentu. Bagaimanakah akses boleh diperolehi ke kelas ini?

Jawapan:

Menggunakan kelas C dalam C# tidak boleh dilakukan secara langsung. Sebaliknya, ikuti langkah berikut:

  1. Buat fungsi bukan ahli untuk setiap fungsi ahli kelas, memanggil fungsi ahli.
  2. Gunakan P/Invoke untuk mendedahkan fungsi bukan ahli ini kepada C#.

Contoh:

class Foo {
public:
  int Bar();
};
extern "C" Foo* Foo_Create() { return new Foo(); }
extern "C" int Foo_Bar(Foo* pFoo) { return pFoo->Bar(); }
extern "C" void Foo_Delete(Foo* pFoo) { delete pFoo; }
Salin selepas log masuk

Dalam C#:

[DllImport("Foo.dll")]
public static extern IntPtr Foo_Create();

[DllImport("Foo.dll")]
public static extern int Foo_Bar(IntPtr value);

[DllImport("Foo.dll")]
public static extern void Foo_Delete(IntPtr value);
Salin selepas log masuk

Kelas Pembungkus:

Untuk memudahkan penggunaan, balut penuding IntPtr ke dalam pembalut C# kelas:

public class FooWrapper
{
  private IntPtr _foo;

  public FooWrapper()
  {
    _foo = Foo_Create();
  }

  public int Bar()
  {
    return Foo_Bar(_foo);
  }

  public void Dispose()
  {
    Foo_Delete(_foo);
  }
}
Salin selepas log masuk

Pendekatan Alternatif:

Jika tidak dapat mengubah suai DLL asal, buat DLL perantaraan yang membalut DLL asal dan mendedahkan kelas yang dibalut kepada C# .

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Kelas C DLL dengan Pembolehubah Ahli dan Kaedah Bukan Statik daripada C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan