Подключение DLL-ки написаной на С++
От: gorbva  
Дата: 15.07.08 06:02
Оценка:
Имеетя длл-ка написаная на С++ . С ней идут еще хидер-файл и lib-файл.
В этой длл-ке есть функция такого плана:

LIBSPEC char* CALL_API keyrandom(unsigned long unit_id);

Я вызываю ее из своей программы так (C#, .NET):

[DllImport("KeyDLL.dll",EntryPoint="key_generateRandom",PreserveSig=false)]
public static extern char key_genRND(ulong DEVICE_ID);
.........
char Key_generated = key_genRND(1234567890);


При работе выползает следующий егог:
"Additional Information: Attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang."

Вот я непойму где я накосячил..
Скорее всего где-то в возвращаемом значении. Ведь длл-ка возвращает поинтер на массив символов, C# не понимает поинтеры с разбегу.
Как обработать возвращаемое значение? Что делать с этим поинтером?
Посоветуйте что вкурить по данному вопросу?
Re: Подключение DLL-ки написаной на С++
От: gorbva  
Дата: 16.07.08 04:17
Оценка:
Нашел...

[DllImport("KeyDLL.dll",EntryPoint="key_generateRandom",PreserveSig=true)] //Во первых PreserveSig ставим в true
[return:MarshalAs(UnmanagedType.LPStr)] // Говорим маршалингу что возвращаемое значение есть поинтер на массив char

public static extern string key_genRND(ulong DEVICE_ID); // и тогда смело выгребыем возврат в string

string Key_generated = key_genRND(1234567890);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.