Quiero usar Cargar DLL() con mi propia DLL creada en Visual Studio. ¿Alguien lo ha hecho correctamente?
¿Dónde puedo encontrar un código fuente de muestra que muestre cómo hacer esto en el lado DLL?
Esta es la dirección que quiero tomar. ¡Gracias!
Sería fantástico tener una solución/proyecto VS de muestra para descargar y compilar.
Tal vez puedas obtener algo del soporte técnico; puede haber un archivo llamado ExtFunctionTests que es un programa C++ con un conjunto completo de ejemplos para pasar tipos de datos dentro y fuera de una DLL.
O tal vez esto vaya en la dirección correcta (esto se creó en 2009 con cualquier versión de Visual Studio que fuera popular en ese momento. Aquí están las secciones importantes: "sonido" porque esta DLL se usó para permitir que JMP reproduzca sonido)
La interfaz JMP funciona en 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;
}El archivo .DEF
; JMPSound.def : Declares the module parameters for the DLL.
LIBRARY "JMPSound"
EXPORTS
; Explicit exports can go here
_JMP_Declarations
El JSL para iniciar la DLL es simple debido a las g_Declaraciones anteriores:
dll = loaddll("C:\Documents and Settings\L\Desktop\JMPSound.dll");
dll<<INIT></INIT>"init()" just works. And "feed()" is similar, passing arrays...
<CODE class=" language-jsl"> data = leftchan || rightchan || col1:*alternate || col2:*alternate || col3:*alternate || col4:*alternate;
dll << feed( data, 0 );
(The purpose of the DLL was to accept audio samples through the feed function and play them...while JMP was computing the next set of samples. The threading stuff was specific to this DLL, you don't need to use threads.)
Consulte el enlace de Mark para conocer las DLL compatibles con JMP. Hice uno hace mucho tiempo. Para ser claros, hay dos tipos: DLL compatibles con JMP y todo lo demás. Una DLL compatible con JMP tiene información adicional que la hace un poco más fácil de usar y probablemente no tenga puntos de entrada que sean inutilizables. Los puntos de entrada que utilizan estructuras complicadas y punteros que no se asignan correctamente a los tipos de datos JMP probablemente no se puedan utilizar.
Buscaré y veré si puedo encontrarlo, hay bastante polvo donde lo dejé...
A continuación se muestra un ejemplo de un uso no consciente de la nota de audio en un sobre "PlaySound en la DLL multimedia".
@jschroedl
Y hay esta entrada en la Ayuda de JMP para archivos DLL.
Si hace 'Ayuda > Índice de secuencias de comandos' y busca 'DLL', debería ver una serie de ejemplos para comenzar:
