none
Error de CREATE ASSEMBLY RRS feed

  • Pregunta

  • Hola,

    He creado la dll MathLibrary.dll siguiendo los pasos que se indican en el siguiente link:

    https://docs.microsoft.com/es-es/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=msvc-160

    Después intento crear el Assembly en una base de datos, ejecuto el siguiente código:

    CREATE ASSEMBLY
    MathLibrary1
    FROM 'C:\FicherosPruebas\MathLibrary.dll'

    Pero da el siguiente error 

    Msg 6544, Level 16, State 1, Line 1
    Error de CREATE ASSEMBLY para el ensamblado 'MathLibrary1' porque el ensamblado 'MathLibrary1' tiene un formato incorrecto o no es un ensamblado de .NET puro. 
    Encabezado PE/código auxiliar nativo no comprobable.

    He probado a descargar dll de internet y también da el mismo error.

    Todo esto lo hago, porque necesito crear un ensamblado en la base de datos para poder hacer pruebas.

    Gracias 

    Un saludo

    martes, 13 de abril de 2021 16:05

Todas las respuestas

  • La clave está en esta frase tomada del enlace que pusiste: "El archivo DLL usa la convención de llamada de C."

    De ahí se infiere que en ese tutorial te están guiando para generar una DLL binaria con puntos de entrada convencionales de Windows. Eso no vale para SQL Server. Con CREATE ASSEMBLY únicamente se pueden utilizar DLLs de .NET. Por dentro contienen código MSIL, y contienen también un manifiesto que describe los puntos de entrada. No sirve cualquier DLL compilada de cualquier manera.

    Si solo quieres crear un ensamblado en la base de datos para hacer pruebas, no lo hagas con C++ sino con C#. Un proyecto de DLL para .NET Framework hecho con C# y con todas las opciones predeterminadas genera un Assembly adecuado para SQL Server. Si es necesario, este assembly en C# puede usar P/Invoke para a su vez llamar a una DLL binaria hecha en C++, pero para hacer esto tienes que concederle permiso EXTERNAL ACCESS en el CREATE ASSEMBLY.


    martes, 13 de abril de 2021 18:37