See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 19233|Vastuse: 0

[WinForm] Kuidas kutsuda meetodeid C/C++ DLL-ides C# keeles

[Kopeeri link]
Postitatud 05.02.2015 20:52:39 | | | |

Esiteks loo C++ DLL projekt



Muuda CPPTest.cpp järgmiselt:

CPPTest.cpp : Määratleb DLL-rakenduse sisenemispunkti.
//
#include "stdafx.h"
#include

#ifdef _MANAGED
#pragma sai hakkama (lükkamine, eemaldumine)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
ekstern "C"
{

struct TestStruct
{
int i;
char* str;
};

_declspec(dllexport) size_t __stdcall GetStringLength(char* & str)
{
Return strlen (strlen);
}

_declspec(dllexport) int __stdcall AddTwoNumber(const int a, const int b)
{
tagasta a+b;
}

_declspec(dllexport) void __stdcall StructTest(TestStruct&s)
{
kasutades nimeruumi std;
cout<<s.i<<endl;
cout<<s.str<<endl;
s.i=54321;
s.str="Nad on kõik surnud!";
}
}

#ifdef _MANAGED
#pragma suutis (pop)
#endif


2. Loo C# testiprojekt


Muuda programmi sisu järgmiselt:

kasutades süsteemi;
kasutades System.Collections.Generic;
kasutades System.Texti;
kasutades System.Runtime.InteropServices;

nimeruum ConsoleApplicationTestCSharp
{
Klassiprogramm
{
[DllImport("CPPTest.dll")]
staatiline ekstern int GetStringLength (viide string str);

[DllImport("CPPTest.dll")]
staatiline ekstern int AddTwoNumber(int a, int b);

[DllImport("CPPTest.dll")]
staatiline ekstern void StructTest (viide TestStruct s);

staatiline tühjus Main(string[] args)
{
string testString = "HAHA! Ma olen testnöör";

Console.WriteLine("length(C++)=" + GetStringLength(viide 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 = uus TestStruct();
s.i = 12345;
s.str = "Mine tulistama kurje mägedele!";
StructTest (viide s);
Console.WriteLine(s.i);
Console.WriteLine(s.str);
Console.ReadKey();
}

[StructLayout(LayoutKind.Sequential)]
public struct TestStruct
{
avalik intellekt I;
avalik keelpillide str;
}
}
}

Pane tähele ülaltoodud DllImportAttribute siltiMeetod

Jooksu tulemus:

pikkus(C++)=24
pikkus(C#)=24
a+b(C++)=1010
a+b(C#)=1010
12345
Mine tulistama kurje mägedele!
54321
Nad on kõik surnud!

Kolmandaks, mitme C/C++ märksõna selgitus

_declspec

__stdcall

välised


"C"
(dllexport) eksporditakse DLL-ist __declspec abil (dllexport).
</s.str<<endl;
</s.i<<endl;




Eelmine:Ehita meiliserver Winmailiga
Järgmine:C# Dünaamilise oleku viite DLL meetod (taastrükk)
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com