La Red de Conocimientos Pedagógicos - Currículum vitae - vb llama dinámicamente a la biblioteca de enlaces dinámicos

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