DllNotFound Исключение, когда я использую функции перенасыщения в моей Dll - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть приложение c ++ dll и c #. В приложении C # я вызываю функцию из dll. С простой функцией, как:

extern "C"
{
    __declspec(dllexport) void HelloFromDll()
    {
        MessageBox(NULL, _T("Hello from DLL"), _T("Hello from DLL"), NULL);
    }
}

все отлично работает. Когда я использую функцию с переизбытком, как это:

extern "C"
{
    __declspec(dllexport) int InitGlut()
    {
        glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
        glutInitWindowPosition(100,100);
        glutInitWindowSize(320,320);
        glutCreateWindow("MyWindow");
        glutDisplayFunc(renderScene);
        glutMainLoop();
        return 0;
    }
}

Я получаю исключение DllNotFound. Зачем? Код C #:

const string pathToDll = "../../../Release/MyDLL.dll";
[DllImport(pathToDll)]
public static extern void HelloFromDll();
[DllImport(pathToDll)]
public static extern int InitGlut();

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    HelloFromDll();
    InitGlut();
}

Ответы [ 3 ]

1 голос
/ 21 апреля 2011
 const string pathToDll = "../../../Release/MyDLL.dll";

Шансы не велики, что это будет правильный путь.Или то, что это помогает Windows найти любые зависимые библиотеки DLL, это не так.Что еще хуже, шансы равны нулю после того, как вы развернули свое приложение.

Добавьте событие пост-сборки в ваш проект, которое скопирует все необходимые собственные библиотеки DLL в каталог $ (TargetDir) с помощью xcopy / d / y.Окна всегда смотрят туда первыми.И это будет работать как при отладке, так и после развертывания.И ваш каталог сборки содержит все необходимое для развертывания.

1 голос
/ 21 апреля 2011

Установите в рабочем каталоге вашего приложения путь к DLL, это должно решить вашу проблему.

0 голосов
/ 21 апреля 2011

Смотрите здесь .
Имя DLL и путь должны быть разделены, как показано там ...

...