Désolé pour ma réponse j'ai raté la manip ...
Je refais :
Bon après m'être acharné j'ai réussi à faire tourner le truc mais ça ne me convient pas à 100%.
Premier problème de ma solution : ce n'est pas du C mais du C++
Second problème la DLL est déclarée par regasm de manière statique je ne peux donc pas deployer facilement la solution (enfin si quelqu'un a une meilleure idée je suis preneur).
Sur XP ça se passe bien en étant simple admin mais sur Vista faut carrément lever tous les verrous de l'admin.
La procédure suivante est valable pour VS 2005.
Tout d'abord créer la DLL en VB..; exemple de code pour le projet mydllname :
Code :
Function Addition(ByVal Num1 As Integer, ByVal Num2 As Integer, ByRef Result As Integer) As Integer
End Interface
Public Class Class1
Implements myInterface
Function myFunc(ByVal Num1 As Integer, ByVal Num2 As Integer, ByRef Result As Integer) As Integer Implements myInterface.Addition
Result = Num1 + Num2
Return Result
End Function
End Class
Aller dans les propriétés du projet et régler l'option rendre l'assembly visible par COM (onglet application > bouton informations de l'assembly)
Aller ensuite dans l'onglet signature et signer l'assembly avec un nom fort.
Ici : mydllname.snk
Compiler la dll.
Lancer la commande dos de l'environnement VS, aller dans le dossier de la dll puis taper :
/regasm mydllname.dll /tlb:mydllname.tlb /codebase
Créer le projet en C++ (hé oui en C j'ai pas trouvé j'ai dit)
Exemple de code :
d'abord importer la bibliothèque de type :
Code :
// Import the type library.
#import "ClassLibrary2.tlb"
using namespace ClassLibrary2;
En supposant que la DLL soit placé dans le meme dossier que l'appli CPP (exe ou dll, en général dans le dossier release) et que la TLB soit placée dans le dossier du projet CPP (avec le code source).
Sinon varier les plaisir avec des trucs du genre :
#import "..\mydllname\bin\Release\ClassLibrary2.tlb"
ensuite utiliser la fonction qui vous intéresse comme ceci :
Code :
HRESULT hr = CoInitialize(NULL);
ClassLibrary2::myInterfacePtr myPtr(__uuidof(Class1));
long lResult = 0;
char buffer[256];
// Call the Add method.
myPtr->Addition(12,158, &lResult);
// Uninitialize COM.
CoUninitialize();
En espérant que ça puisse vous servir autant qu'à moi.
A+
Male