Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
-X-
6 / 6 / 0
Регистрация: 10.06.2013
Сообщений: 32
1

Импорт функции из dll

13.08.2013, 11:08. Просмотров 727. Ответов 2
Метки нет (Все метки)

Доброго времени суток.

Есть dll на с++ с некоторой функцией такого вида:
C++
1
2
3
4
extern "C" __declspec(dllexport) void __stdcall func(char* string)
{
     ...
}
Нужно ее использовать в с# проекте.
Нашел примеры где в подобном случае рекомендуется использовать StringBuilder:
C#
1
2
3
4
5
6
7
8
9
10
11
[UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode)]
public delegate void Read(out StringBuilder str);
public Read read;
 
 
IntPtr ptr = LoadLibrary("<dllName>");
IntPtr hRead = GetProcAddress(ptr, "<functionName>");
read = (Read)Marshal.GetDelegateForFunctionPointer(hRead, typeof(Read));
 
StringBilder s = new StringBuilder(100);
read(s);
В результате ошибка: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.

Подскажите как решить проблему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2013, 11:08
Ответы с готовыми решениями:

Импорт функции из DLL написанной на С++
Есть dll файл написанный на С++ (Visual Studio) Работал с этой библиотекой в...

Импорт из dll
В dll есть функция, возвращающая строку в стиле С char const* __cdecl fn() ...

Импорт DLL
Есть DLL, в которой определён namespace DLL_test, а в программе нужно...

импорт функций из DLL
В общем, решил я попрактиковаться в анализе программ, в ходе возникла проблема....

Импорт метода из Dll написанной на C++
Всем привет! Вот какая проблема. Нужно вызвать метод из Dll написанный на c++. ...

2
NickoTin
Почетный модератор
Эксперт .NET
8450 / 3572 / 402
Регистрация: 14.06.2010
Сообщений: 4,512
Записей в блоге: 9
14.08.2013, 00:22 2
Цитата Сообщение от -X- Посмотреть сообщение
CharSet = CharSet.Unicode
Цитата Сообщение от -X- Посмотреть сообщение
out
Уберите.

А чем простой DllImport не подходит?
1
-X-
6 / 6 / 0
Регистрация: 10.06.2013
Сообщений: 32
20.08.2013, 10:11  [ТС] 3
Спасибо, помогло.
Dllimport не подходил тем, что dll могла быть разных версий и не во всех версиях присутствуют все импортируемые функции. Нужен был механизм контроля, который мог корректно отключить соответствующие модули если недоступна хотя бы одна нужная ему функция и не обрушить всю систему.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2013, 10:11

Импорт dll(C++) в dll(C#)
Во общем нужно из c# dll'ки вызвать функцию с c++ dll'ки. Написал вот так...

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

Импорт WINAPI-функции в C#
как импортировать WINAPI-фунцию BOOL SetupDiGetDevicePropertyKeys( _In_...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru