vb llama dinámicamente a la biblioteca de enlaces dinámicos
Tengo algunas sugerencias con respecto a tu pregunta.
1. Respecto al desperdicio de recursos. En realidad, la carga dinámica ya existe. Un Dll puede contener muchas funciones y el archivo Dll en sí puede no ser grande. Unos cientos de megabytes se consideran un archivo grande. Para el hardware del sistema actual, la sobrecarga de estos recursos no debería ser un problema demasiado grande. . Por supuesto, esto no tiene en cuenta qué tipo de software está diseñando, así que hagamos esta suposición. De hecho, si el DLL solo se carga cuando se usa la función y se descarga cuando no se usa, la eficiencia en sí se verá afectada. En la actualidad, Dll está cargado y existe en la memoria, y no se descargará hasta que se cierre el programa. En realidad, esto es intercambiar espacio por tiempo y sacrificar memoria por eficiencia. Este es un método comúnmente utilizado. Creo que es mejor no perder el tiempo en esto a menos que tengas que sacrificar la eficiencia por el espacio de memoria.
2. La sintaxis de VB ha sido determinada y no puede implementar directamente sus requisitos. La mayoría de los lenguajes realmente requieren que si desea utilizar una función en un determinado DLL, debe especificarla de antemano y luego llamarla en el programa. Puede diseñar un mecanismo de llamada a través de algunas API para lograrlo.
Puede consultar el siguiente proceso:
(1) Utilice LoadLibrary para cargar Dll
(2) Utilice GetProcAddress para obtener la dirección de la función
(3) Utilice CallAnyFunc para llamar a esta función (el código de CallAnyFunc es el siguiente; gracias al autor del código, puede encontrar información detallada en línea)
Área de declaración:
Función de declaración privada CallAsmCode Lib "user32" Alias "CallWindowProcA" (lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, lParam As Long) As Long
Área de código:
Función privada CallAnyFunc(ByVal pFn mientras, ByVal pParam mientras, ByVal Count mientras) Mientras
Dim CallAnyFuncCode(34) Mientras, lRet Mientras
CallAnyFuncCode(0) = amp; H53EC8B55
CallAnyFuncCode(1) = amp;HE8amp;
CallAnyFuncCode(2) = amp;HEB815B00
CallAnyFuncCode(3) = amp;H1000112C
CallAnyFuncCode(4) = amp;H114A938D
CallAnyFuncCode(5) = amp;H64521000
CallAnyFuncCode(6) = amp;H35FFamp;
CallAnyFuncCode(7) = amp;H89640000
CallAnyFuncCode(8) = amp;H25amp;
CallAnyFuncCode(9) = amp;H8B1FEB00
CallAnyFuncCode(10) = amp;HE80C2444
CallAnyFuncCode(11) = amp;H0amp;
CallAnyFuncCode(12) = amp;H53E98159
CallAnyFuncCode (13) = amp;H8D100011
CallAnyFuncCode (14) = amp; H119791
CallAnyFuncCode(15) = amp HB8908910
CallAnyFuncCode(16) = amp; ; H33000000
CallAnyFuncCode(17) = amplificador; H558BC3C0
CallAnyFuncCode(18) = amplificador H104D8B0C
CallAnyFuncCode(19) = amplificador;
HEB8A148D
CallAnyFuncCode(20) = amplificador HFC528D06
CallAnyFuncCode(21) = amplificador HB4932FF
CallAnyFuncCode(22) = H8BF675C9
CallAnyFuncCode(23) = amp; HD0FF0845
CallAnyFuncCode(24) = amp; H58F64
CallAnyFuncCode(25) = H83000000
CallAnyFuncCode( 26) = amplificador H4D8B04C4
CallAnyFuncCode(27) = amplificador H5B018914
CallAnyFuncCode(28) = amplificador H10C2C9
CallAnyFuncCode(29) = amplificador; H58F64
CallAnyFuncCode(30) = amplificador H83000000
CallAnyFuncCode(31) = amplificador HC03304C4
CallAnyFuncCode(32) = H89144D8B
CallAnyFuncCode(33) = amp; HC2C95B21
CallAnyFuncCode(34) = amp; H90900010
CallAnyFunc = CallAsmCode(CallAnyFuncCode(0), pFn, pParam, Count, lRet)
If CallAnyFunc lt;gt; lRet Then
CallAnyFunc = 0 '±íʾشí?óuddle?±˽?Ŀ?ĺ?ʹ?·?·¨
Debug.Assert False '?òΪ?IJ?⣬³?ò?ѳ?·?·¨?×÷?
Finalizar si
Finalizar función