2015-03-24 9 views
0

Я пишу приложение C#, которое использует статический Lib C++. Я завернул Lib в .dll, но столкнулся с проблемой. Когда я вызываю функцию .dll, я получаю исключение System.Stackoverflow.Исключение Stackoverflow при вызове dll, которое использует статический lib

Мне нужно использовать .lib, поскольку он уже используется в другом месте. Мне нужны решения, которые позволят мне общаться с lib из моей программы на C#.

C#

CreateRegistryLocation(mPath); 

[DllImport("Wrapper.dll", CallingConvention = CallingConvention.Cdecl)] 
    public static extern int CreateRegistryLocation(string key); 

C++ .dll

extern "C" 
{ 
    __declspec(dllexport) int CreateRegistryLocation(const char* key) 
    { 
     return RegistryNamespace::CreateRegistryLocation(key); 
    } 
} 

C++ .lib

extern "C" 
{ 
    int CreateRegistryLocation(const char* key); 
} 

Если удалить вызовы к экспромты из DLL, то связь между DLL и приложение, похоже, работает так, как я ожидаю. Я удалил тело в .lib и сделал его просто возвратом 0, поэтому я не верю e body функции lib имеет отношение к проблеме. Я не назначаю возвращаемое значение чему-либо в C#, поэтому я не вижу рекурсивной проблемы. В настоящий момент код должен просто называться exe -> Dll -> Lib, а значение 0 должно возвращать резервную цепочку.

Любое понимание было бы очень оценено.

+0

Если вы установили точку останова в функцию CreateRegistryLocation вашей библиотеки, она туда попала? Если да, проверьте, правильно ли настроен ваш параметр ... – michaelb

ответ

1
__declspec(dllexport) int CreateRegistryLocation(const char* key) 
{ 
    return RegistryNamespace::CreateRegistryLocation(key); 
} 

Вероятное объяснение состоит в том, что эта функция в RegistryNamespace имен и так RegistryNamespace::CreateRegistryLocation просто не оконечное рекурсивный вызов. Учитывая код в вопросе, это наиболее правдоподобное объяснение.

+0

Спасибо, Дэвид, я не понимал, что .dll находится внутри пространства имен и тратит время на то, чтобы придумать гораздо более экзотические объяснения. – Dustybin80

 Смежные вопросы

  • Нет связанных вопросов^_^