Cómo escribir DLL en VB
Para escribir una DLL de tipo API, lea mi siguiente artículo. Si no lo comprende, puede saludarme en Baidu. Mi experimento fue exitoso.
Preguntas 1-. 4 se deben a que la esencia de ActiveX DLL es un control, por lo que debes hacer referencia a él como un control cuando lo uses.
5 Sí, pero es difícil para una DLL encapsular funciones como API, lo cual es difícil. algo similar al efecto de un control personalizado.
6. Sí, consulte el artículo a continuación
Cómo usar VB para escribir un archivo de biblioteca de vínculos dinámicos .DLL
La DLL creada en VB es solo un COM. componente y no se puede utilizar como La DLL que exporta funciones es en realidad un nombre inapropiado. De hecho, MS es muy astuto. Si eres un entusiasta loco de VB, deberías haber probado este método que puede crear una DLL que genere funciones hace mucho tiempo.
El archivo compilado de VB en realidad utiliza dos métodos de compilación: primero llama a C2.exe para generar el archivo *.OBJ y luego llama a Link.EXE para conectarse. Si agrega la opción EXPORTAR cuando ENLACE, puede exportar la función. Sin embargo, estos están bloqueados en las opciones del proyecto de VB. Lo que es aún más escandaloso es que VB eliminará el archivo OBJ después de que se complete la compilación, por lo que no podremos crear manualmente la DLL que necesitamos a través de Link. Sin embargo, encontré una solución bastante fea, que consiste en crear primero un proyecto Exe y escribir la siguiente declaración en el evento Form_Load:
Sub Main
If MsgBox("Jaja" , vbOKCancel) = vbOK Entonces
Shell "link2.exe " & Command$
End If
End Sub
Luego compila en LinkTemp .EXE, luego cambie el nombre de LINK.EXE a Link2.exe y cambie el nombre de LinkTemp.EXE a Link.EXE. De esta manera, cuando VB llame a Link.EXE, aparecerá un cuadro de diálogo y se interrumpirá el procesamiento. En este momento, tendrá la oportunidad de copiar el archivo OBJ.
Luego creé un proyecto DLL ActiveX, agregué un módulo a este proyecto y creé una función pública mathadd:
Función pública mathadd(ByVal a As Long, ByVal b As Long) As Largo
mathadd = a + b
Función final
La compilación de este proyecto se interrumpirá durante el enlace. Luego haga una copia de seguridad de Class1.obj, Module1.obj y Project1.obj creados.
Luego puede llamar a Link2.exe para conectar el OBJ a la DLL. Mi código de conexión es:
Link2.exe "e:\vbdll\Class1.obj" "e: \ vbdll\Module1.obj" "e:\vbdll\Project1.obj" "E:\Program Files\Microsoft Visual Studio\VB98\VBAEXE6.LIB" /ENTRY:__vbaS /EXPORT:mathadd /OUT:"e:\vbdll \ ProjectOK.dll" /BASE:0x11000000 /SUBSYSTEM:WINDOWS,4.0 /VERSION:1.0 /Dll /INCREMENTAL:NO /OPT:REF /MERGE:.rdata=.text /IGNORE:4078
Presta atención a los modificadores /ENTRY y /EXPORT, el modificador /EXPORT declara la función de salida mathadd. Esto se hace y puede ser introducido por otros lenguajes, como VB, solo necesita:
Función de declaración privada mathadd Lib "e:\vbdll\ProjectOK.dll" (ByVal a As Long, ByVal b As Long ) Siempre