DllImportAttribute and DllNotFoundException
От: Аноним  
Дата: 27.07.04 08:28
Оценка:
Здравствуйте!

Помогите разобратся со следующим:

Пробую вызвать внешнюю функцию, ее исходний код:



__declspec( dllexport ) int MyFunction(int MyVal)
{

    return MyVal;
}



код компилится с помощью Borland C++Builder 6 в MyDll.dll файл

Вызывать пробую так (предварительно скопировав MyDl.dll в bin\ папку VS проекта):


public class Container
{
    [DllImport("MyDll.dll",CharSet=CharSet.Auto, SetLastError=true)]
    public static extern int MyFunction(int a);

}
class Class1
{
    [STAThread]
    static void Main(string[] args)
    {
        int a=Container.MyFunction(5);
        Console.WriteLine(a);
    }
}


но на строке "int a=Container.MyFunction(5);" получаю Exception:

An unhandled exception of type 'System.DllNotFoundException' occurred in Test.exe

Additional information: Unable to load DLL (MyDll.dll).

Почему?
Re: DllImportAttribute and DllNotFoundException
От: Mab Россия http://shade.msu.ru/~mab
Дата: 27.07.04 08:40
Оценка:
Что можно попробовать сделать:
1) проверить, что dll действительно лежит в каталоге bin (по условию это вроде так, но всякое бывает )
2) depends mydll.dll и далее изучать, на что dll ссылается
Re: DllImportAttribute and DllNotFoundException
От: Andrudis  
Дата: 27.07.04 09:18
Оценка:
А ты в References в своем проекте эту библиотеку добавил?
Re[2]: DllImportAttribute and DllNotFoundException
От: Аноним  
Дата: 27.07.04 09:20
Оценка:
Здравствуйте, Mab, Вы писали:

Mab>Что можно попробовать сделать:

Mab>1) проверить, что dll действительно лежит в каталоге bin (по условию это вроде так, но всякое бывает )
Mab>2) depends mydll.dll и далее изучать, на что dll ссылается
файл MyDll.dll точно лежит в bin папке, проверял

а на счет зависимостей...
Исходный код включает в себя только
#include <windows.h>
#include <stdio.h>
....
усли Вы это имели в виду

Неужели никто так ни разу и не попробовал создать функцию на С а потом вызвать ее из С#?
Re[3]: DllImportAttribute and DllNotFoundException
От: Mab Россия http://shade.msu.ru/~mab
Дата: 27.07.04 09:23
Оценка:
А>усли Вы это имели в виду
Я имел в виду список импорта dll-ки. Так что выдает depends?

А>Неужели никто так ни разу и не попробовал создать функцию на С а потом вызвать ее из С#?

Пробовал Но не на BCB, мало ли что он с собой еще потащит...
Re[2]: DllImportAttribute and DllNotFoundException
От: Mab Россия http://shade.msu.ru/~mab
Дата: 27.07.04 09:24
Оценка:
Какие референсы, у него dll-ка unmanaged...
Re[2]: DllImportAttribute and DllNotFoundException
От: Аноним  
Дата: 27.07.04 09:26
Оценка:
Здравствуйте, Andrudis, Вы писали:

A>А ты в References в своем проекте эту библиотеку добавил?


Библиотеку с неуправляэмым кодом?
а как ты это себе представляешь?
Re: DllImportAttribute and DllNotFoundException
От: Andrudis  
Дата: 27.07.04 09:45
Оценка:
А>Вызывать пробую так (предварительно скопировав MyDl.dll в bin\ папку VS проекта):

В bin\Debug или в bin\Release ?
Re[4]: DllImportAttribute and DllNotFoundException
От: Аноним  
Дата: 27.07.04 10:06
Оценка:
Здравствуйте, Mab, Вы писали:

А>>усли Вы это имели в виду

Mab>Я имел в виду список импорта dll-ки. Так что выдает depends?

как это сделать (посмотреть зависимости)?
Можно подробнее начиная с этого места?
Re[2]: DllImportAttribute and DllNotFoundException
От: Аноним  
Дата: 27.07.04 10:08
Оценка:
Здравствуйте, Andrudis, Вы писали:


A>В bin\Debug или в bin\Release ?


в bin\Dubug
(До релиза еще далеко )
Re[5]: DllImportAttribute and DllNotFoundException
От: Mab Россия http://shade.msu.ru/~mab
Дата: 27.07.04 10:13
Оценка:
А>Можно подробнее начиная с этого места?
"C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\Bin\Depends.Exe" <your-dll-name>
Запускаем и смотрим, какие dll ей нужны и есть ли они в дефолтовом пути поиска.

Просто если dll не хочет грузиться, то значит должны быть причины на то.
Re[6]: DllImportAttribute and DllNotFoundException
От: Аноним  
Дата: 27.07.04 10:38
Оценка:
Здравствуйте, Mab, Вы писали:

Mab>Просто если dll не хочет грузиться, то значит должны быть причины на то.


Хорошая утилита!

иерархия сдедующая:
[ ] MYDLL.DLL
[ ] c:\windows\system32\KERNEL32.DLL
[ ] c:\windows\system32\NTDLL.DLL
[F^ ] c:\windows\system32\NTDLL.DLL
[ ] d:\progra~1\borland\cbuild~1\bin\CC3260MT.DLL
ADVAPI32.DLL
KERNEL32.DLL
USER32.DLL
OLEAUT32.DLL

но пути к этим dll прописаны в Path Environment variable....
Re[7]: DllImportAttribute and DllNotFoundException
От: Mab Россия http://shade.msu.ru/~mab
Дата: 27.07.04 10:47
Оценка:
А>но пути к этим dll прописаны в Path Environment variable....
Печально

Если не жалко, то скинь dll на email, посмотрю вблизи
Re[8]: DllImportAttribute and DllNotFoundException
От: Аноним  
Дата: 27.07.04 10:54
Оценка:
Здравствуйте, Mab, Вы писали:


Mab>Если не жалко, то скинь dll на email, посмотрю вблизи


Конечно не жалко, только вот аддресс для отправки не помешал бы
(На твоей home page я его не нашел)
Re[9]: DllImportAttribute and DllNotFoundException
От: Mab Россия http://shade.msu.ru/~mab
Дата: 27.07.04 10:58
Оценка:
А>(На твоей home page я его не нашел)
Н-да...сорри
mailto:mab@shade.msu.ru
Re: DllImportAttribute and DllNotFoundException
От: Mab Россия http://shade.msu.ru/~mab
Дата: 27.07.04 12:13
Оценка:
В общем, по порядку.

1) Функция объявлена неправильно. Вместо
__declspec( dllexport ) int MyFunction(int MyVal)
{

    return MyVal;
}

нужно
extern "C" int __stdcall __export MyFunction(int MyVal)
{

    return MyVal;
}

В частности, в dll экспорт был _MyFunction, а не MyFunction.

2) Присланная dll не загружается через LoadLibrary. GetLastError дает ERROR_DLL_INIT_FAILED -- A dynamic link library (DLL) initialization routine failed. Так что это не pinvoke-specific issue.

Отчего такое происходит -- тебе виднее. Может __declspec(thread) где есть, а может просто DllMain чего не понравилось и она FALSE вернула
Re[2]: DllImportAttribute and DllNotFoundException
От: Аноним  
Дата: 27.07.04 13:00
Оценка:
Ты был прав!
Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.