Freigeben über


Как вызвать native C++ DLL из ASP.NET (C#) кода?

????????: ? ????? ????? ?????? ???????????? DLLImport ? P/Invoke. ?? ??? ????? ?????, ????? DLL ????? ?????????. ??? ?????????? ?????????, ?????? ??????? DLL ? ??? ?? ???????, ??? ? ???? ?????????, ? ????? ?????. ?? ? ASP.NET ??? ?? ????????, ????????? ??? ??????????? ??????? ??? (?????? ???????? ??? - ?? ???? ?????? ???? DLL ?? ?????? ?? ???????, ?? ? ???????). ?????? ?????????? ????? ????? Windows/System32 -- ?????? ?????? ???. ? ??? ??????? ????????? ????? ??? ??? ?? ????? ????? DLL ? ????????.

???????: ??????-?? ????? ??? ????????? ???? ?????????, ??. ????????, ?????, ? ????????? ???? ?????????? ??????????? ????????? ????? ????? reflection, ???????? ? ???? ?????????? path/??????? (??. ?????). ??????, ??? ???? ?????. ?????? ????????? ???? DLL ????? LoadLibrary ????? ?????? ???????, ??????? ?? ??????????. ????? ?? ????? ?? ??????, ???? ??? ??? ???? ? ??????.

????????? ???? (C#):

?????????? LoadLibrary:

 [DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string lpFileName);

 [DllImport("kernel32.dll")]
public static extern IntPtr FreeLibrary(IntPtr library);

?????????? ????? ??????? ? C++ DLL:

 [DllImport("SampleLib.dll", PreserveSig = true, CharSet = CharSet.Unicode)]
public static extern UInt32 DoStuff(...???? ?????????...);

???????? ??????????:

 String DLLPath;
DLLPath = ...?????? ??????? ? ????? DLL...
IntPtr lib = LoadLibrary(DLLPath);
... ??????, ???? lib ????? ????, ?? ?????????, ???, ?? ??????????...

? ?????? ????? ????????:

 UInt32 res = DoStuff(...);

? ??????????, ??????? ?????????? ??????????:

 FreeLibrary(lib); // ????? ????????? HRESULT, ???? ???????

Comments

  • Anonymous
    January 01, 2003
    Здравствуйте, Эльдар! У меня есть стойкое желание написать программу на C# с использованием функций экспортируемых

  • Anonymous
    January 01, 2003
    No need  to assign. Declaration does that. And if "ne zamorachivat'sya", it won't be called because DoStuff lives in a DLL with unknown dynamically defined location. .Net cannot automatically load it because it does not know from where. Pardon for English, writing this under Win7 Beta without Russian keyboard.

  • Anonymous
    January 01, 2003
    Только что мне подсказали, что есть проблема с комментариями. И правда, на последний пост вообще даже на страницу с комментариями не попасть...

  • Anonymous
    March 17, 2009
    Самого главного то нету. Как присвоить адрес к вызываемой функции. А так можно было не заморачиваться и сразу вызвать DoStuff