Je souhaite utiliser Charger DLL() avec ma propre DLL intégrée dans Visual Studio. Quelqu'un a-t-il déjà réussi à le faire ?
Où puis-je trouver un exemple de code source qui montre comment procéder côté DLL.
C'est dans cette direction que je veux aller. Merci!
Ce serait formidable d'avoir un exemple de solution/projet VS à télécharger et à compiler.
Vous pouvez peut-être obtenir quelque chose du support technique ; il peut y avoir un fichier appelé ExtFunctionTests qui est un programme C++ avec un ensemble complet d'exemples pour transmettre des types de données dans et hors d'une DLL.
Ou peut-être que cela ira dans la bonne direction (cela a été construit en 2009 avec la version de Visual Studio qui était populaire à l'époque. Voici les rubriques importantes. "son" car cette DLL a été utilisée pour permettre à JMP de lire le son)
L'interface JMP fonctionne dans la DLL :
EXPORTFUNC int __cdecl init( int nCols, int channelMask, int samplesPerSecond, int nRows )
{
if ( theApp.mSoundThread == NULL )
{
theApp.mSoundThread = (SoundThread*)AfxBeginThread( RUNTIME_CLASS(SoundThread), 0, 0, CREATE_SUSPENDED, 0 );
theApp.mSoundThread->init( nCols, channelMask, samplesPerSecond, nRows );
theApp.mSoundThread->ResumeThread();
return 1;
}
return 0;
}
EXPORTFUNC double __cdecl feed( double * matrix, int elements )
{
return theApp.mSoundThread->feed( matrix, elements );
}
LPWSTR g_Declarations = L"\
DeclareFunction(\"init\", Convention( CDECL ), \n\
Arg( Int32, \"nCols\" ), Arg( Int32, \"channelMask\" ), Arg( Int32, \"samplesPerSecond\" ), Arg( Int32, \"nRows\" ), Returns( Int32 ) ) << \n\
DeclareFunction(\"feed\", Convention( CDECL ),\n\
Arg(Double, Array, \"array of nCols channels X nRows samples, -1..+1 \"), Arg(Int32), Returns(Double) );\n\
";
LPCWSTR __stdcall _JMP_Declarations()
{
return g_Declarations;
}Le fichier .DEF
; JMPSound.def : Declares the module parameters for the DLL.
LIBRARY "JMPSound"
EXPORTS
; Explicit exports can go here
_JMP_Declarations
Le JSL pour initialiser la DLL est simple grâce aux g_Declarations ci-dessus :
dll = loaddll("C:\Documents and Settings\L\Desktop\JMPSound.dll");
dll<<INIT></INIT>"init()" fonctionne tout simplement. Et "feed()" est similaire, passant des tableaux...
data = leftchan || rightchan || col1:*alternate || col2:*alternate || col3:*alternate || col4:*alternate;
dll << feed( data, 0 );
(Le but de la DLL était d'accepter des échantillons audio via la fonction d'alimentation et de les lire... pendant que JMP calculait le prochain ensemble d'échantillons. Les éléments de threading étaient spécifiques à cette DLL, vous n'avez pas besoin d'utiliser de threads.)
Voir le lien de Mark pour les DLL compatibles JMP. J'en ai fait un, il y a longtemps. Pour être clair, il en existe deux types : les DLL compatibles JMP et tout le reste. Une DLL compatible JMP contient des informations supplémentaires qui la rendent un peu plus facile à utiliser et n'a probablement pas de points d'entrée inutilisables. Les points d'entrée qui utilisent des structures complexes et des pointeurs qui ne correspondent pas correctement aux types de données JMP sont probablement inutilisables.
Je vais chercher et voir si je peux le trouver, il est assez poussiéreux là où je l'ai laissé...
Voici un exemple d'utilisation non consciente de " PlaySound dans la DLL multimédia" Note audio dans une enveloppe
@jschroedl
Et voici cette entrée dans l'aide de JMP pour les DLL.
Si vous faites 'Help > Scripting Index' et que vous recherchez 'DLL', vous devriez voir un certain nombre d'exemples pour vous aider à démarrer :
