Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 19233|Відповідь: 0

[WinForm] Як викликати методи в C/C++ DLL у C#

[Копіювати посилання]
Опубліковано 05.02.2015 20:52:39 | | | |

По-перше, створіть проєкт DLL на C++



Змініть CPPTest.cpp так:

CPPTest.cpp : Визначає точку входу для DLL-додатку.
//
#include "stdafx.h"
#include

#ifdef _MANAGED
#pragma впорався (відштовхування, вимкнення)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpЗарезервовано
)
{
повернутися TRUE;
}
зовнішня «C»
{

struct TestStruct
{
int i;
чар* силу;
};

_declspec(dllexport) size_t __stdcall GetStringLength(char* & str)
{
повернення strlen(stren);
}

_declspec(dllexport) int __stdcall AddTwoNumber(const int a,const int b)
{
повернення A+B;
}

_declspec(dllexport) void __stdcall StructTest(TestStruct&s)
{
використання простору назв std;
cout<<s.i<<endl;
cout<<s.str<<endl;
s.i=54321;
s.str="Всі вони мертві!";
}
}

#ifdef _MANAGED
#pragma керував (поп)
#endif


2. Створіть тестовий проєкт на C#


Модифікувати зміст програми на:

використовуючи System;
з використанням System.Collections.Generic;
використовуючи System.Text;
використання System.Runtime.InteropServices;

простор назв ConsoleApplicationTestCSharp
{
Програма класу
{
[DllImport("CPPTest.dll")]
static extern int GetStringLength(ref string str);

[DllImport("CPPTest.dll")]
статичний зовнішній всередині AddTwoNumber(int a, int b);

[DllImport("CPPTest.dll")]
статичний зовнішній порожній StructTest (посилання TestStruct s);

static void Main(string[] args)
{
string testString = "ХАХА! Я — тестова нитка»;

Console.WriteLine("length(C++)=" + GetStringLength(reference testString). ToString());
Console.WriteLine("length(C#)=" + testString.Length.ToString());
Console.WriteLine("a+b(C++)=" + AddTwoNumber(10, 1000));
Console.WriteLine("a+b(C#)=" + (10 + 1000));

TestStruct s = новий TestStruct();
s.i = 12345;
s.str = «Стріляй у зло на горах!»;
StructTest (посилання);
Console.WriteLine(s.i);
Console.WriteLine(s.str);
Console.ReadKey();
}

[StructLayout(LayoutKind.Sequential)]
публічна структура TestStruct
{
Public Int I;
публічна струнна сила;
}
}
}

Зверніть увагу на тег DllImportAttribute вищеметод

Результат забігу:

length(C++)=24
довжина(C#)=24
a+b(C++)=1010
a+b(C#)=1010
12345
Іди стріляти по злих на горах!
54321
Всі вони мертві!

По-третє, пояснення кількох ключових слів у C/C++

_declspec

__stdcall

екстерн


"C"
(dllexport) експортує з DLL за допомогою __declspec (dllexport).
</s.str<<endl;
</s.i<<endl;




Попередній:Побудуйте поштовий сервер за допомогою Winmail
Наступний:Метод DLL динамічного референсу стану C# (перевидання)
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com