none
Problemas al cargar el Wrapper RRS feed

  • Pregunta

  • Hola!!

    Tengo la siguiente problemática. 

       1.- Tengo unas librerias de otro fabricante desarrolladas en C++ y compiladas para 64bits.
       2.- Estas librerias desde un proyecto de tipo consola en C++, funcionan correctamente.
       3.- Necesito que se usen desde un servicio web en C#. 
           Para ello he creado un Wrapper en C++ compilado en 64bits. Con lo que a través del mismo, quiero ejecutar las funciones del otro fabricante.

           He creado un WebService en el que le agrego como referencia MyWrapper.dll, lo compilo sin errores y a la hora de cargar MyWrapper.dll me da el siguiente error:
          No se puede cargar el archivo o ensamblado 'MyWrapper.DLL' ni una de sus dependencias. No se puede encontrar el módulo especificado.
    y da este error precisamente por que está intentando cargarlo. He puesto en la ubicación del bin la OtherProgram_x64.lib y OtherProgramDLL.h del otro fabricante, pero no soluciono nada.

    [FileNotFoundException: No se puede cargar el archivo o ensamblado 'MyWrapper.DLL' ni una de sus dependencias. No se puede encontrar el módulo especificado.]
       System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
       System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +232
       System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) +113
       System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +23
       System.Reflection.Assembly.Load(String assemblyString) +35
       System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +49

    [ConfigurationErrorsException: No se puede cargar el archivo o ensamblado 'MyWrapper.DLL' ni una de sus dependencias. No se puede encontrar el módulo especificado.]
       System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +762
       System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +259
       System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +167
       System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +238
       System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +78
       System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +334
       System.Web.Compilation.BuildManager.ExecutePreAppStart() +178
       System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +746

    [HttpException (0x80004005): No se puede cargar el archivo o ensamblado 'MyWrapper.DLL' ni una de sus dependencias. No se puede encontrar el módulo especificado.]
       System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +552
       System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +122
       System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +737


        4.- Otras pruebas realizadas:
      He probado también a referenciarlo desde un proyecto de Consola de C# 
      He puesto MyWrapper.dll (y las OtherProgram_x64.lib y OtherProgramDLL.h del otro fabricante) en otras ubicaciones que podrían estar 
      He probado a cargarla con Reflection
    En todos los casos, obtengo el mismo resultado.


    Todas las librerias mencionadas se ha desarrollado en Visual Studio 2019.

    ¿Alguna idea de qué puede estar pasando?   

    Gracias!!

    El código de MyWrapper es el siguiente:

    MyWrapper.h
    	#pragma once
    
    	using namespace System;
    
    	namespace MyWrapper {
    		public ref class Class1
    		{
    			// TODO: Agregue aquí los métodos de esta clase.
    		public:
    			double zpredict(const char * model_name, const char * sample);
    
    			void zpredict_threshold(const char * model_name, const char * sample, double threshold, double result[]);
    
    			void zpredict_batch(const char * model_name, const char * samples[], int num_samples, double result[]);
    
    		};
    	}
    MyWrapper.cpp
    #include "pch.h"
    
    	#include "OtherProgram_x64_Release/OtherProgramDLL.h"
    	#include "MyWrapper.h"
    	using namespace MyWrapper;
    
    	double MyWrapper::Class1::zpredict(const char* model_name, const char* sample)
    	{
    		return predict(model_name, sample);
    		//return 0.0;
    	}
    
    	void MyWrapper::Class1::zpredict_threshold(const char* model_name, const char* sample, double threshold, double result[])
    	{
    		//throw gcnew System::NotImplementedException();
    		predict_threshold(model_name, sample, threshold, result);
    	}
    
    	void MyWrapper::Class1::zpredict_batch(const char* model_name, const char* samples[], int num_samples, double result[])
    	{
    		//throw gcnew System::NotImplementedException();
    		predict_batch(model_name, samples, num_samples, result);
    	}




    • Editado Agurtza viernes, 4 de septiembre de 2020 13:34 Se había movido un trozo de texto
    viernes, 4 de septiembre de 2020 13:31

Respuestas

  • Hola Agurtza, 

      

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comparto el siguiente enlace que contiene un documento oficial sobre DllImportAttribute.

    https://docs.microsoft.com/es-mx/dotnet/api/system.runtime.interopservices.dllimportattribute?view=netcore-3.1

    Gracias por usar los foros de MSDN. 

      

    Eric Ruiz

    ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 


    • Marcado como respuesta EricRRModerator sábado, 12 de septiembre de 2020 0:53
    viernes, 4 de septiembre de 2020 16:02
    Moderador

Todas las respuestas

  • Hola Agurtza, 

      

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comparto el siguiente enlace que contiene un documento oficial sobre DllImportAttribute.

    https://docs.microsoft.com/es-mx/dotnet/api/system.runtime.interopservices.dllimportattribute?view=netcore-3.1

    Gracias por usar los foros de MSDN. 

      

    Eric Ruiz

    ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 


    • Marcado como respuesta EricRRModerator sábado, 12 de septiembre de 2020 0:53
    viernes, 4 de septiembre de 2020 16:02
    Moderador
  • La dll de terceros también la tengo en la misma ubicación que el resto y no funciona.

    Cuando digo que lo he cargado por reflection, me refería a usar el atributo DllImport, no me he explicado bien.

    viernes, 4 de septiembre de 2020 16:10