Подключение c++ dll к c# проекту
От: vadimpri  
Дата: 26.05.06 08:33
Оценка:
Здравствуйте!
Недавно мне нужно было подключить к проекту (ASP.NET Web Site) две библиотеки, написанные давным-давно (и не мной) на Visual C++ 6.0. + MFC. Сделать это быстро и просто не получилось – пришлось писать обертку (ATL компоненту), к ней подключать эти библиотеки, а уж потом эту обертку присоединять к проекту.

При попытке подключить библиотеки “напрямую” были следующие ошибки:
1. При использовании в контекстном меню “Add Reference”->”Browse”… , студия ругалась так:

A reference to 'E:\hmathlng.dll' could not be added. Please make sure that the file is
accessible, and that it is a valid assembly or COM component.

2. При использовании атрибута DllImport в коде программы:
[DllImport("E:\\hermitech\\run\\release\\hmathlng.dll", EntryPoint = "TMLWRP_getFunction_Number")]
public static extern int getFunction_Number();
и последующего обращения к методу getFunction_Number() получал исключение:

Unable to find an entry point named 'TMLWRP_getFunction_Number' in DLL 'E:\hmathlng.dll'.

Объясните, пожалуйста, в чем причина этих ошибок, правильно ли я сделал, что написал обертку или эти ошибки можно было исправить.
Re: Подключение c++ dll к c# проекту
От: Аноним  
Дата: 26.05.06 10:22
Оценка:
Unable to find an entry point named 'TMLWRP_getFunction_Number' in DLL 'E:\hmathlng.dll'.
А почему он ищет DLL напрямую на E?
Re[2]: Подключение c++ dll к c# проекту
От: Аноним  
Дата: 26.05.06 11:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Unable to find an entry point named 'TMLWRP_getFunction_Number' in DLL 'E:\hmathlng.dll'.

А>А почему он ищет DLL напрямую на E?

Извиняюсь, сделал опечатку, правильно будет:
Unable to find an entry point named 'TMLWRP_getFunction_Number' in DLL 'E:\hermitech\run\release\hmathlng.dll'.
Re: Подключение c++ dll к c# проекту
От: Nuald Россия http://nuald.blogspot.com
Дата: 01.06.06 00:00
Оценка:
Здравствуйте, vadimpri, Вы писали:

V>При попытке подключить библиотеки “напрямую” были следующие ошибки:

V>1. При использовании в контекстном меню “Add Reference”->”Browse”… , студия ругалась так:

V>A reference to 'E:\hmathlng.dll' could not be added. Please make sure that the file is

V>accessible, and that it is a valid assembly or COM component.

Ссылку можно добавить только на .NET или COM компонент, а очевидно, что у вас и не то и не другое. Можно, конечно, переконвертировать ваши исходники в C++/CLI

V>2. При использовании атрибута DllImport в коде программы:

V>[DllImport("E:\\hermitech\\run\\release\\hmathlng.dll", EntryPoint = "TMLWRP_getFunction_Number")]
V> public static extern int getFunction_Number();
V>и последующего обращения к методу getFunction_Number() получал исключение:

V>Unable to find an entry point named 'TMLWRP_getFunction_Number' in DLL 'E:\hmathlng.dll'.


V>Объясните, пожалуйста, в чем причина этих ошибок, правильно ли я сделал, что написал обертку или эти ошибки можно было исправить.


Если вы добавляете именно C++ библиотеку, то у меня большое подозрение, что экспортное имя функции ни разу не "TMLWRP_getFunction_Number". Советую взять инструмент Dependency Walker и в нем посмотреть, какие именно функции экспортирует ваша библиотека и какие у них имена. В VS 2005 он находится в "C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\Depends.Exe", в других версиях — примерно там же — %VS_HOME%\%VS_COMMON%\Tools\Bin\.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Подключение c++ dll к c# проекту
От: Streamer1 Украина  
Дата: 03.06.06 16:19
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>>Unable to find an entry point named 'TMLWRP_getFunction_Number' in DLL 'E:\hmathlng.dll'.

А>>А почему он ищет DLL напрямую на E?

А>Извиняюсь, сделал опечатку, правильно будет:

А>Unable to find an entry point named 'TMLWRP_getFunction_Number' in DLL 'E:\hermitech\run\release\hmathlng.dll'.

скорей всего экспортное имя функции не TMLWRP_getFunction_Number, а какоето другое...
попробуй еще не прописывать полный путь к dll'ке:
    [DllImport("hmathlng.dll", EntryPoint = "TMLWRP_getFunction_Number")]
    public static extern int getFunction_Number();


положи dll'ку в папку со скомпиленым exe'шником и запусти exe'шник сам (чтобы быть уверенным что запускается именно этот exe'шник, а не его копия из другой папки)
Тот кто говорит не знает, тот кто знает не говорит.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.