005
30.06.2003, 20:19 Uhr
Uwe
C/C++ Master (Administrator)
|
Hallo, Erzeuge mal bitte nachfolgende Dll's mit VC++6.0
C++: |
// FirstDll.dll #include <windows.h>
BOOL __stdcall DllMain(HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved) { return TRUE; }
__declspec(dllexport) void __stdcall Message(char* p_szMessage) { MessageBox(NULL, p_szMessage, "MessageBox aus der Dll", MB_OK); }
|
C++: |
//SecondDll.dll #include <windows.h>
BOOL __stdcall DllMain(HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved) { return TRUE; }
extern "C" __declspec(dllexport) void __stdcall Message(char* p_szMessage) { MessageBox(NULL, p_szMessage, "MessageBox aus der Dll", MB_OK); }
|
Als erstes musst du beim Dll-Bau auf die Aufrufkonvention achten. _stdcall übergibt die Parameter von rechts nach links. Wenn Du die erste Dll aufrufst Krachsts, da Du dir durch __declspec(dllexport) eine Namensergänzung durch den C++ Compiler einfängst. durch Variante zwei wird dies behoben. Aufrufer:
C++: |
using System; using System.Runtime.InteropServices;
namespace Aufruf { class Class1 { private const string FuenfLeerZeichen = " "; [DllImport("SecondDll.dll")] // FirstDll.dll; static extern void Message(string msg); static void Main(string[] args) { try { Message("Test V01\n" + "man 10\n" + "Axel 5\n" + "Gewicht 20\n" + "\tSTRCOP 25\n"+ "Test V02\n" + "man 10\n" + "Flip 5\n" + "Gewicht 20\n" + FuenfLeerZeichen + "STRCOP 45" + "Bla2 15"); } catch(DllNotFoundException e) { Console.WriteLine(e.ToString()); } catch(EntryPointNotFoundException e) { Console.WriteLine(e.ToString()); } }
} }
|
Soviel für den Anfang -- "Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."
Bis dann... Uwe |