DLL arma3

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
bebou007
Messages : 79
Inscription : dim. 06/mars/2005 20:18

DLL arma3

Message par bebou007 »

voila j'essaye de crée une dll pour arma3

le jeu permet de charger une dll avec une seul fonction qui ce nome RVExtension et comme parametre (char *output, int outputSize, const char *function);

-char *output => c'est un pointeur sur un char pour retourner une valeur string ou char
-int outputSize => c'est la taille du buffer alouer pour output il a une valeur max
-const char *function => c'est un paramètre dedans on peut mettre ce que l'on veut il sert principalement comme non de fonction c'est a dire que si l'on veut plusieurs fonction c'est a nous de faire un case celons ce parametre

j'ai essayer de faire une dll simple mais rien ne fonction

je sais pas si c'est a cause du fai qu'il faut declarer la fonction avec

Code : Tout sélectionner

  __declspec(dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); 
voila un exemple si quelqu’un pourrais m aider a faire une conversion vers purebasic car ce bout de code en c++ fonctionne parfaitement

Code : Tout sélectionner

// dllmain.cpp : Defines the entry point for the DLL application.
#define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
 
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;
}
 
extern "C"
{
  __declspec(dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); 
};
 
void __stdcall RVExtension(char *output, int outputSize, const char *function)
{
  outputSize -= 1;
  strncpy(output,function,outputSize);
}

merci a vous
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: DLL arma3

Message par G-Rom »

Salut bebou007 , ca fait longtemps ! ;)

de cette manière , peu être :

Code : Tout sélectionner

ProcedureDLL RVExtension(*output, outputSize, *functionName)
  CopyMemory(*functionName,*output,outputSize-1)
EndProcedure
bebou007
Messages : 79
Inscription : dim. 06/mars/2005 20:18

Re: DLL arma3

Message par bebou007 »

salut oui sa faisais longtemps même si je passe de temps en temps

je vais essayer et je te tien au courant mais il me semble que j'avais essayer quelque chose dans ce genre

voila un extrait du wiki
How to make an extension
Begin by setting up your development environment to create a .dll - dllmain must do the work for initializing and cleaning up, RVExtension is the only function called by the game engine.

(TODO: Insert a couple example projects)

DLL Interface
The dll is expected to contain an entry point of a form _RVExtension@12, with a following C signature:

void __stdcall RVExtension(char *output, int outputSize, const char *function);

The game currently calls the RVExtension function with outputSize of 4096 (can be increased in future versions if needed, called extensions should always check this value and never produce output larger than this size). If the function is to receive arguments, they can be concatenated to the function name and the dll is responsible to perform any spliting / parsing / decoding as needed.

The engine supplies (via function) and expects (via output) a UTF-8 encoded C string. Conversion to/from wide character set strings (LPCWSTR/LPWSTR) can be performed using MultiByteToWideChar and WideCharToMultiByte functions.

The example dll source example follows. In this example the dll simply copies the input to the output:

// dllmain.cpp : Defines the entry point for the DLL application.
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>

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;
}

extern "C"
{
__declspec(dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function);
};

void __stdcall RVExtension(char *output, int outputSize, const char *function)
{
outputSize -= 1;
strncpy(output,function,outputSize);
}
c'est peut être sa qui pose probleme

The dll is expected to contain an entry point of a form _RVExtension@12, with a following C signature:

void __stdcall RVExtension(char *output, int outputSize, const char *function);

[edit] je viens de faire l'essaie mais rien on dirais quelle n'est pas apeller j'ai fait des teste création de fichier mais rien pas de fichier

[edit1] il y a d'autre exemple dans d'autre langage

d'apres ce que je comprend le nom de la procedure doit etre comme sa _RVExtension@12

en delphi par exemple il y a sa

exports
RVExtension name '_RVExtension@12';

existe t-il un fonction similaire

je viens d'editer ma dll en c++ qui fonctionne et c'est bien comme sa que la fonction et renomer _RVExtension@12 mais pas en purebasic

par contre pas moyen de mettre ce nom dans proceduredll
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: DLL arma3

Message par G-Rom »

PB ne décore pas ses fonctions.
bebou007
Messages : 79
Inscription : dim. 06/mars/2005 20:18

Re: DLL arma3

Message par bebou007 »

ben il devrais lol

donc c'est mort pour burebasic?

j'ai essayer de changer depuis l’éditeur de texte mais sa ne fonctionne pas j'imagine qu'il faut ausi changer un point d'entrée

bon ben je vais voir merci quand même
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: DLL arma3

Message par G-Rom »

Non, tu fait une dll en c++ qui appelle une dll en purebasic ;)
Tu n'as pas changé , essaye de faire un effort sur les erreurs d'orthographes s'il te plait ;)
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: DLL arma3

Message par falsam »

G-Rom a écrit :les erreurs d'orthographes
Orthographe sans s :mrgreen:

Je pars aussi vite que je suis venuuu...
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: DLL arma3

Message par G-Rom »

J'ai jamais dis que j'étais un crack en FR :) mais quand mon navigateur met du rouge partout , il y a un problème :)
Je savais que j'allais me faire reprendre la dessus ^^
Avatar de l’utilisateur
MetalOS
Messages : 1498
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: DLL arma3

Message par MetalOS »

Ont s'en fout le principal c'est de ce comprendre.
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: DLL arma3

Message par majikeyric »

tu ah rézon maithalEauS :mrgreen:

je sors> :D
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: DLL arma3

Message par G-Rom »

Non, on s'en fout pas. même moi qui est une quiche en Français je fait des efforts pour que ça ne te pique pas les yeux ;)
et si tu commence à écrire tes post en sms, je te kick :mrgreen:
Avatar de l’utilisateur
MetalOS
Messages : 1498
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: DLL arma3

Message par MetalOS »

En sms faut pas pousser, mais quelques erreurs il n'y a rien de grave.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: DLL arma3

Message par Ollivier »

Et si l'on ajoute autant de tirets (caractère "_") que nécessaire en fin de nom de procédure et, qu'ensuite l'on vient remplacer ces tirets directement dans le fichier-librairie, ça passe ou ça casse?
bebou007
Messages : 79
Inscription : dim. 06/mars/2005 20:18

Re: DLL arma3

Message par bebou007 »

Ollivier et bien j'ai essayer de remplacer depuis un éditeur hexa, après le nom de la fonction il n'y a que des zero donc c'est pas la place qui manque mais sa ma fait crash le jeux mais je vais quand même essayer ton idée.

pour ce qui et de crée une dll qui charge une autre a ce compte la je la fait directement en c++ c'est juste une question de rapidité de programmation

merci quand même pour vos réponse


[edit]

bon ben sa fonctionne pas non plus crash du jeu

soit il y a un hash sur la dll soit l'architecture de la dll et differente selon le mode fonction décorer ou pas
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: DLL arma3

Message par Ollivier »

Non, pas de map...
Est-ce que "@n" est-il le bon type de suffixe?
Si oui, la valeur "n" est-elle la bonne? C'est un réglage de pile, donc s'il est erroné, ça crashe...

Il y a aussi la convention ProcedureDLL vs ProcedureCDLL. Je crois que la 1ère use EAX en retour, et la 2nde use la pile.

Bon courage, et bon jeu!

[edit]
Moi y en a écrit :Il y a aussi la convention ProcedureDLL vs ProcedureCDLL. Je crois que la 1ère use EAX en retour, et la 2nde use la pile.
J'ai bavouillé dans la soupe en écrivant ça...

ProcedureDLL : convention stdcall
ProcedureCDLL : convention cdecl

Résultat: si ton jeu crash, c'est mystique! Normalement, il y a un hash mais après la compilation de la DLL, lors de ses chargements ultérieurs. Peut-être que les nouveaux fichiers DLL n'écrasent pas la version qui crashe (selon l'OS). M'enfin bon courage quand même...
Répondre