Re[2]: как подключить dll из BulderC++ к VC++.NET
От: Аноним  
Дата: 08.02.06 08:11
Оценка:
Здравствуйте, Mab, Вы писали:

Mab>Здравствуйте, Hiden, Вы писали:

H>>что в этом случае делать?
Mab>Подробнее описать проблему. Начнем с вопроса "при чем здесь .NET"?

Стоит задача, сделать dll на buldere в которой описывается ф-я, например:
--------mydll.cpp----------------
#include "myDLL.h"
#include <windows.h>


#ifdef _MANAGED
#pragma managed(push, off)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

#ifdef _MANAGED
#pragma managed(pop)
#endif

extern "C" {

SAMPLEDLL_API int __stdcall Function(void)
{
MessageBox(0,TEXT("Hello world"),TEXT(""),MB_OK);
return 11;
}

};
-------------mydll.h-----------------
#ifdef SAMPLEDLL_EXPORTS
#define SAMPLEDLL_API __declspec(dllexport)
#else
#define SAMPLEDLL_API __declspec(dllimport)
#endif

extern "C" {
SAMPLEDLL_API int __stdcall Function(void);
}
----------mydll.def---------------
LIBRARY MyDll.dll
EXPORTS
Function

Эту dll нужно использовать в .NET
в С++.NET я написал так:
-------------form1.h--------------
........
private: System::Void button1_Click(System::Object* sender, System::EventArgs* e) {
// call external dll
HANDLE h=LoadLibrary(TEXT("MyDLL.dll"));
//trace(h);
typedef int (__stdcall *Function_ptr)();
Function_ptr fn=NULL;
fn=(Function_ptr)GetProcAddress((HMODULE)h,"Function");
printf((char*)fn);
if (fn!=NULL) (*fn)();
//FreeLibrary(h);
CloseHandle(h);
printf("test1");
........
--------------form1.cpp-----------
#include "stdafx.h"
#include "Form1.h"
#include <windows.h>

using namespace MyDll;

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;
Application::Run(new Form1());
return 0;
}


Проблема в том что .NET не может подключить мою dll, что в этом случае можно сделать???
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.