Salut,
j'ai compilé une function C/C++
Comment est ce que je doit l'appeler à partir de perl
dison que j'ai le function suivant en C/C++
je veux l'appeler à partir de perlCode:
1
2
3
4 *char func(char *ptr, int len) { ... return str;}
:roll:
Version imprimable
Salut,
j'ai compilé une function C/C++
Comment est ce que je doit l'appeler à partir de perl
dison que j'ai le function suivant en C/C++
je veux l'appeler à partir de perlCode:
1
2
3
4 *char func(char *ptr, int len) { ... return str;}
:roll:
regarde les modules inline::c et Inline::CPP
Dans un environnement Windows, tu peux utiliser Win32::API.
Ça permet d'aller 'chercher' des fonctions dans une dll (système ou fabrication maison) puis de les exécuter.
Du coté C/C++Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 sub fnImportFunction { my $function_ref = shift; my $strFuncName = shift; my $strParamString = shift; my $strReturnString = shift; if (!defined(&{$function_ref})) { my $bOK = Win32::API->Import( 'popeye_dll.dll', $strFuncName, $strParamString, $strReturnString); if ( $bOK == 0 ) { Log( -1, "Error importing $strFuncName : $^E" ); } else { Log( 2, "$strFuncName successfully imported" ); } } } # puis plus loin, dans le code : # Import 'transfert' function from C++ dll # Params : # IN : # 1 string to write datas 'P' # Returns # 1 long 'N' # &fnImportFunction(\&fnSetString,'fnSetString','P','N'); # Et encore un peu plus loin, pour utiliser fnSetString &fnSetString("$strVal");
Code:
1
2
3
4
5
6
7
8
9
10
11
12 POPEYE_DLL_API long __stdcall fnSetString(char *sVal) { COPYSTR(g_sRetVal,sVal); g_strRetVal = sVal; return (strlen(sVal) < LGSTRING - 1)?1L:0L; } // POPEYE_DLL_API est défini par define POPEYE_DLL_API __declspec(dllexport) pour générer la dll // Attention aux options de compilation, il faut 'Alignement des membres de la structure' règlé à 1 octet (/Zp1 avec Visual).