DLL en C++, svp :(

NitRic - 5 juil. 2001 à 08:24
 BlackWizzard - 26 juil. 2001 à 22:28
Ca fait 4 jours que j'essaie de créée une simple DLL qui ne fait afficher qu'un simple MessageBox et ca ne fonctionne pas... :\

Voici mon code au complet, il n'y à qu'un fichier qui ce nomme ma_dll.cpp

///////////////////////////////////////////////////////////////

#include <windows.h>

extern "C" __declspec(dllexport) BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved)
{

switch (reason)
{

case DLL_PROCESS_ATTACH:
case DLL_PROCESS_DETACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;

}

return TRUE;

}

extern "C" __declspec(dllexport) void ViewMessage(char *Message, char *MsgTitle)
{

MessageBox(NULL, (LPCTSTR)Message, (LPCTSTR)MsgTitle, MB_APPLMODAL|MB_YESNO|MB_ICONQUESTION);

}

///////////////////////////////////////////////////////////////

// Je fait le teste avec VB5, voici le code:
'
Option Explicit

Private Declare Sub ViewMessage Lib "E:\C_CPP_Folder\Mes Programmes\DLL's\Test\Source\madll.dll" (ByVal Message As String, ByVal MsgTitle As String)

' J'ai aussi essayer en copiant la DLL dans le répertoire du projet VB -> Lib "madll.dll"

Private Sub Form_Load()

'On Error Resume Next

Call ViewMessage("Salut ca va bien ?", "Coucou")
Unload Me

End Sub

Ca ne fonctionne pas, j'ai essayer de cette facon: void __stdcall ViewMessage(les paramètres){...}
et ca ne fonctionne pas plus... :\ j'ai essayer sans le APIENTRY, avec WINAPI, j'ai essayer en compilant en C(32bit), j'ai essayer de mélanger les mots extern "C"(pour les prog c++), __stdcall, __declspec(dllexport), de les écrire un peu partout en les remplacant, sans c'est mots etc... bref j'ai essayer tout plein d'affaire, même ceux qui ne fonctionne pas et qui n'ont aucun raport je les est essayer aussi... la je ne sais plus quoi faire... si quelqu'un pouvait me dire comment créée une simple DLL ca serait vraiment sympat de ca part :)

///////////////////////////////////////////////////////////////

Les erreurs de VB:

Avec extern "C" __declspec(dllexport):
Il ne trouve pas le point d'entré dans la DLL(celui de ma fonction ViewMessage)
Et:
Il dit que je n'utilise pas la convention d'appel StdCall

Avec le __stdcall:
Il ne trouve pas le point d'entré...

Pis quand j'essaie tout plein d'affaire ben c'est toujours les même erreurs...

///////////////////////////////////////////////////////////////

J'utilise Dev-C++ 4, je les fais essayer à un de mes ami qui à VC++ et ca ne fonctionne pas plus, il y à aussi le fichier .DEF que voila:

; dlltool --base-file C:\WINDOWS\TEMP\cca88651.base --output-exp Madll.exp --dllname Madll.dll --output-def E:/C_CPP_~1/MESPRO~1/DLL'S/TEST/SOURCE/dll.def --exclude-symbol=DllMainCRTStartup@12 --def C:\WINDOWS\TEMP\cca88651.def
EXPORTS
ViewMessage @ 1 ;

Ca c'est celui créé par default par le compilateur, moi je les recréé de cette facon(j'ai regarder un source):

LIBRARY "madll.dll"

EXPORTS
ViewMessage

et ca ne fonctionne pas plus... j'ai aussi essayer d'autre facon mais rien... sur les 15 sources(exemples) que j'ai downloader aucun ne fonctionne... pourtant ils avaient inclus la DLL compiler dans leur ZIP et quand j'essayait leurs DLL ca fonctionnais.... :\

///////////////////////////////////////////////////////////////

Les erreurs du Linker:
gcc: llMain@12C:\WINDOWS\TEMP\cca88651: No such file or directory
Warning: no export definition file provided
dllwrap will create one, but may not be what you want
C:\DEV-C_~1\BIN\dllwrap: gcc exited with status 1

Compilateur:
madll compiled successfully

///////////////////////////////////////////////////////////////

Si quelqu'un pouvait m'aider ca serait vraiment gentil de ca part :)

[mailto:NitRic28@Hotmail.com NitRic]

1 réponse

BlackWizzard
26 juil. 2001 à 22:28
ajoute un fichier madll.def qui contient ce code:

; madll.def
LIBRARY Mydll

CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD MOVEABLE

EXPORTS
ViewMessage @1

voila!
ce fichier sert à lister les fonctions...

@++
0
Rejoignez-nous