Sugerencias para usar Delphi para hacer archivos multiplexados de DLL
Intente usar interfaces DLL estándar. Significa que el tipo de parámetro y el tipo de retorno de función aprobados no pueden ser exclusivos de Delphi, como String (Ansistring), así como matrices dinámicas y tipos compuestos (como registros) que contienen este tipo de miembros, ni pueden contener miembros de datos de Este tipo de miembros. Si usa el tipo de cadena o el tipo de matriz dinámica y la persona que llama no es un programa Delphi, básicamente informará un error. También puede ocurrir un error si la persona que llama es Delphi pero la persona que llama o la Callee no está en la primera unidad que contiene el archivo del proyecto, que no es Sharemem.
Si la persona que llama es una aplicación Delphi, puede usar objetos que no contienen miembros de datos del tipo prohibido (cadena, matriz dinámica) como parámetros o valores de retorno, pero también deben evitarse tanto como sea posible.
Si la persona que llama y la parte llamada son programas Delphi y necesitan usar una cadena o matriz dinámica como parámetros, la primera unidad de inclusión del archivo del proyecto entre las dos partes debe ser Sharemem. (El programa C ++ Builder puede ser el mismo, pero no se ha probado).
Si la persona que llama no es un programa Delphi, cadena, matriz dinámica, tipos de datos compuestos e instancias de clase que contienen cadena o matrices dinámicas no se pueden usar como parámetros o valores de retorno.
Por lo tanto, para mejorar el rango de multiplexación de DLL y evitar posibles errores, se debe usar el tipo de parámetro estándar WIN32 estándar de WIN32. Las matrices dinámicas se convierten en tipo de puntero (@array [0]) y agregan la longitud de la matriz.
Si la persona que llama y la fiesta llamada son programas Delphi y no quieren realizar la conversión anterior para la comodidad de escribir, se recomienda utilizar la forma de un paquete de tiempo de ejecución. Los paquetes de tiempo de ejecución pueden garantizar la versión correcta de datos asignados dinámicamente. De esta manera, debido a su extensión (.bpl), muestra que el archivo está limitado al constructor Delphi/C ++ (a diferencia de DLL).
En segundo lugar, trate de evitar el uso de funciones/procesos de sobrecarga tanto como sea posible. y métodos en Delphi, como CreateByDefaultFile y CreatedFault.
Finalmente, como proveedor de DLLS, debe proporcionar archivos de interfaz de programación directos como .pas o .dcu en Delphi (preferiblemente .pas, ya que puede haber comentarios), .h y .lib en C y C ++. En lugar de dejar que los usuarios lo creen ellos mismos. Esto es particularmente importante si tiene que tener una función/proceso de sobrecarga. Además, como aplicación Delphi, el archivo .pas proporcionado se puede conectar por adelantado (usando externo para especificar la función de salida en la DLL) o posterior (usando LoadLibrary y GetProcaddress). muestra que es formal (o hiqos) y garantizado.