Этот вопрос основан на следующем сообщении: https://stackoverflow.com/users/9999861/blackbriar
Теперь у меня есть проблема, что каждый раз, когда я хочу использовать DLL, System.EntryPointNotFoundException
происходит.В сообщении об исключении говорится, что точка входа с именем функции, которую я пытался вызвать, не найдена в моей dll.
Вот пример функции, которая находится в файле .h:
#ifdef __cplusplus
extern "C"
{
#endif
__declspec(dllexport) int __stdcall LDL_Init(char* code)
...
#ifdef __cplusplus
}
#endif
И я импортировал функцию в C # следующим образом:
[DllImport("C:\\Path\\To\\Dll\\Example.dll", EntryPoint="LDL_Init", CallingConvention=CallingConvention.StdCall)]
public static extern int LDL_Init( [MarshalAs(UnmanagedType.LPStr)] System.Text.StringBuilder code );
Кто-то понимает, что я делаю неправильно?
Далее Попробуйте:
Я проанализировал сгенерированную dll с помощью Dependency Walker и обнаружил, что ни одна функция не была экспортирована.Итак, я написал обертку-класс.Вот новые примеры кода:
В Library.h:
int LDL_Init(char* code);
В LibraryWrapper.h:
#pragma once
class __declspec(dllexport) LibraryWrapper
{
public:
static int __cdecl LDL_Init(char* code);
};
В LibraryWrapper.cpp.
#include "Library.h"
#include "LibraryWrapper.h"
int LibraryWrapper::LDL_Init(char* code){
return LDL_Init(code);
}
В Library.cs:
[DllImport("C:\\Path\\To\\Dll\\Example.dll")]
public static extern int LDL_Init( [MarshalAs(UnmanagedType.LPStr)] System.Text.StringBuilder code );
К сожалению, у меня при выполнении программы такой же результат: Старый добрый System.EntryPointNotFoundException
...
Вот скриншотрезультат Dependency Walker:
и без подкрашивания методов C ++: