Voglio usare Carica DLL() con la mia DLL creata in Visual Studio. Qualcuno ci è riuscito?
Dove posso trovare un codice sorgente di esempio che mostri come fare questo sul lato DLL?
Questa è la direzione in cui voglio andare. Grazie!
Sarebbe bello avere una soluzione/progetto VS di esempio da scaricare e compilare.
Forse puoi ottenere qualcosa dal supporto tecnico; potrebbe esserci un file chiamato ExtFunctionTests che è un programma C++ con un set completo di esempi per passare i tipi di dati dentro e fuori una DLL.
O forse questo andrà nella giusta direzione (questo è stato costruito nel 2009 con qualsiasi versione di studio visivo fosse popolare in quel momento. Ecco le sezioni importanti. "suono" perché questa DLL è stata utilizzata per far riprodurre l'audio a JMP)
L'interfaccia JMP funziona nella 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;
}Il file .DEF
; JMPSound.def : Declares the module parameters for the DLL.
LIBRARY "JMPSound"
EXPORTS
; Explicit exports can go here
_JMP_Declarations
Il JSL per avviare la DLL è semplice a causa delle g_Declarations sopra:
dll = loaddll("C:\Documents and Settings\L\Desktop\JMPSound.dll");
dll<<INIT></INIT>"init()" funziona e basta. E "feed()" è simile, passando gli array...
data = leftchan || rightchan || col1:*alternate || col2:*alternate || col3:*alternate || col4:*alternate;
dll << feed( data, 0 );
(Lo scopo della DLL era accettare campioni audio attraverso la funzione feed e riprodurli... mentre JMP stava calcolando il successivo set di campioni. Il materiale di threading era specifico per questa DLL, non è necessario utilizzare i thread.)
Vedere il collegamento di Mark per le DLL compatibili con JMP. Ne ho fatto uno, tanto tempo fa. Per essere chiari, ci sono due tipi: DLL compatibili con JMP e tutto il resto. Una DLL compatibile con JMP ha alcune informazioni aggiuntive che la rendono un po' più facile da usare e probabilmente non ha punti di ingresso inutilizzabili. I punti di ingresso che utilizzano strutture complicate e puntatori che non si adattano bene ai tipi di dati JMP sono probabilmente inutilizzabili.
Lo guardo e vedo se riesco a trovarlo, è abbastanza impolverato ovunque l'ho lasciato...
Ecco un esempio di uso non consapevole di " PlaySound nella DLL multimediale" Nota audio in una busta
@jschroedl
E c'è questa voce nella Guida di JMP per le DLL.
Se fai "Aiuto > Indice degli script" e cerchi "DLL", dovresti vedere una serie di esempi per iniziare:
