Urgente Utilizar classes de DLL

Discussão em 'EMS , HCM e Totvs 11' iniciado por lucas.monteiro, Setembro 8, 2022.

  1. lucas.monteiro

    lucas.monteiro Sem Pontuação

    Boa tarde, pessoal.

    Existe alguma maneira de utilizar classes que estão em um assembly de uma DLL? O assembly já está no Assembly References, porém ao tentar definir uma variável com a classe proveniente da DLL, ele gera o erro de que o DataType é inválido. Alguma ideia?
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Você tem o fonte desse DLL?

    Já tentou usar esse DLL no Visual Studio pra ver como instancia a classe?

    Geralmente primeiro se importa a classe utilizando USING no topo do programa e depois definindo o objeto, tipo:

    DEF VAR obj AS NEW minhaClasse. //Onde minhaClasse não tem nada haver com o nome do arquivo DLL
  3. fdantas

    fdantas Administrator Moderador

    Achei um exemplo na net veja se ajuda

    Código:
    BLOCK-LEVEL ON ERROR UNDO, THROW.
    
    PROCEDURE HelloWorld EXTERNAL "C:\Users\Steee\source\repos\DllHelloWorld\x64\Release\DllHelloWorld.dll" CDECL:
        DEFINE INPUT PARAMETER hello AS SHORT NO-UNDO.
        DEFINE OUTPUT PARAMETER rCode AS SHORT NO-UNDO.
    END.
    
    DEFINE VARIABLE hello AS INTEGER NO-UNDO.
    DEFINE VARIABLE rCode AS INTEGER NO-UNDO.
    hello = 3.
    
    RUN HelloWorld(hello, OUTPUT rCode).
    
    MESSAGE STRING(rCode)
    VIEW-AS ALERT-BOX INFO BUTTONS OK.

    Código da DLL

    Código:
    #include "pch.h"
    #include <windows.h>
    #include <string.h>
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
                         )
    {
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
        }
        return TRUE;
    }
    //---------------------------------------------------------------------------
    /*
    BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
    {
        return 1;
    }
    */
    
    //---------------------------------------------------------------------------
    extern "C" __declspec(dllexport) int HelloWorld(int hello)
    {
        return hello * 2;
    }
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

Compartilhe esta Página