2013-07-17 2 views
-1

Я пытаюсь получить доступ к управляемой функции из собственного кода. Я создал dll C++/cli в visual studio 2010 с опцией CLR. Это мой C# код:не удалось создать объект C# из кода CLI

namespace ManagedNamespace 
{ 
    public class Managed 
    { 
     public void CSharpFunc() 
     { 
      . 
      . 
      . 
     } 
    } 
} 

Это мой C++ код \ CLI (проект относится к C# проекта - и я скомпилировать этот код Wrapper.dll):

#ifdef __cplusplus 
extern "C" 
{ 
#endif 
    __declspec(dllexport) void CLIFunc(const std::string& a, const std::string& b, std::string& c) 
    { 
     System::String^ new_a = gcnew System::String(a.c_str()); //OK 
     System::String^ new_b = gcnew System::String(b.c_str()); //OK 
     Text::StringBuilder^ new_c = gcnew Text::StringBuilder(""); //OK 
     ManagedNamespace::Managed^ m = gcnew ManagedNamespace::Managed(); //this line is the problematic line 
     m->CSharpFunc(); 
    } 

Я называю эту функцию из другой dll и получить EXCEPTION_EXECUTE_HANDLER, когда я создаю ManagedNamespace :: Managed object. Это код:

typedef void (WINAPI *CLIFuncPtr)(const std::string& a, const std::string& b, std::string& c); 
. 
. 
. 
HMODULE mod = LoadLibraryA("c:\\mydir\\Wrapper.dll"); 
if (mod!= NULL) 
{ 
    CLIFuncPtr FuncPtr = (CLIFuncPtr)GetProcAddress(mod, "CLIFunc"); 
    if (FuncPtr != NULL) 
    { 
     FuncPtr (aa, bb, cc); 
    } 
} 

Цените любую помощь, Спасибо

+0

Что такое точное сообщение об ошибке? –

+0

Это уместно? http://stackoverflow.com/questions/6628412/c-cli-catching-all-net-win32-crt-exceptions Можете ли вы сделать отладчик прерыванием всех исключений и посмотреть, что пошло не так? – doctorlove

+0

Исключение: EEFileLoadException * _ptr64 в ячейке памяти 0x .... – pitz

ответ

0

Я думаю, что LoadLibrary работает только с неуправляемым кодом