Мен сізден сұрайтын нәрсе екеніне сенімді емеспін, бірақ сіз C
бағдарламасынан C функциясынан функцияларды қоңырау шала аласыз ба
деп сұрасаңыз, онда сіз аласыз. Сіз өзіңіздің C бағдарламаңызға
бастапқы кодты алғаныңызша. C функциясының C# бағдарламасына қол жетімді болу үшін оларды
экспорттау қажет. Мен сізге мысал келтіремін:
MyAddDll.h
#include
extern "C"
{
__declspec(dllexport) int Add(int a, int b);
}
Мұнда маңыздысы - сіздің функция extern «C»
блогына
оралған. Негізінде, бұл компиляторға сіздің функцияңыздың атын
алмастырмайтындығын көрсетеді. Басқа маңызды элемент - __
declspec (dllexport)
. Бұл компиляторды басқа функциядан (C
# бағдарламасы сияқты) шақыруға болатын функцияны экспорттағыңыз
келетінін айтады.
MyAddDll.cpp
#include
#include "MyAddDll.h"
extern "C"
{
__declspec(dllexport) int Add(int a, int b)
{
return (a + b);
}
}
Тағы да, сіздің кодыңыз extern «C»
блогына оралып,
функцияға __ declspec (dllexport)
қосуыңыз қажет. Енді
оны DLL файлына немесе EXE файлына жинақтай аласыз. Енді оны
C# -тен қоңырау шалуға болады:
MyProgram.cs
class Program
{
[DllImport("c:\\PathToMyDllOrExeFile\\MyAddDll.dll")]
public static extern int Add(int val1, int val2);
static void Main(string[] args)
{
int val1 = 12;
int val2 = 4;
Console.WriteLine("{0} + {1} = {2}", val1, val2, Add(val1, val2));
}
}
Мұның бәрі бар!
Біреуі «gotcha» дегенмен сіздің C бағдарламаңыздың және C# бағдарламаңыздың 32-биттік немесе 64-бит ретінде
құрастырылғанына көз жеткізіңіз. C бағдарламаңызды 64 биттік және
C# бағдарламаңызды 32 биттік ретінде
құрастыра алмайсыз. Олар бірдей бит ұзындығын пайдалану керек.