Avatar billede ajensen62 Nybegynder
19. februar 2007 - 21:24 Der er 5 kommentarer

Kald til C# DLL

Hej med jer,

Jeg er godt nok en nivise på det her område, men jeg har en lille udfordring, da jeg skal lave en C# DLL som jeg kan kalde
fra et program som kun kan kalde med (long, unsigned char)det er oprindeligt et C kald der for en string tilbage.

jeg har lavet en klasse hvori jeg returnere et argument.

Mit problem er at det virker i C++ men jeg vil gerne bruge C# da jeg skal arbejde videre med de data jeg kalder med.

det er den extern der er i C++ jeg ikke kan finde noget om.

Er der nogen som har nogle tips eller nogle gode link?
jeg har prøvet www.codeproject.com og der var ikke noget eller osse kan jeg bare ikke afgrænse rigtig :-)

ajensen62
Avatar billede thesurfer Nybegynder
19. februar 2007 - 21:30 #1
Så vidt jeg ved, kan C++ og C# ikke tale sammen..
Måske kan de, hvis det er Visual C++, men jeg tvivler..
Avatar billede driis Nybegynder
19. februar 2007 - 22:16 #2
Der er en tråd om det her
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetcomp/html/COM_Interop.asp

(Jeg er ikke helt sikker på din beskrivelse. Ovenstående omhandler at skrive C++, som kalder C# kode - Hvis det rent faktisk er den anden vej, at du vil kalde C/C++ DLL fra din C# kode, så er opgaven en del nemmere).
Avatar billede arne_v Ekspert
19. februar 2007 - 22:49 #3
Hvis jeg har forstået problem stillinge korrekt, så har du et program som
loader en DLL dynamisk og kalder en bestemt funktion med nogle bestemte argumenter.
Og du vil gerne kunne skrive denne DLL i C#.

Det kan du ikke umiddelbart da man ikke kan generer en Win32 DLL udfra C# kode.

Du kan lave følgende:

app---(LoadLibrary og GetProcAddress kald)---Win32 DLL skrevet i C++---(CoInitialize og andre COM kald)---.NET asembly som exposer COM interface
Avatar billede ajensen62 Nybegynder
20. februar 2007 - 09:03 #4
Hej med jer,

Jeg var vist lidt forvirret i går.

Det er det her jeg kalder Dll’en op med: DLLCALL(&DllHandle, ”My function”,INT,STR):STR

Jeg har lavet en DLL i C++ som virker og som i selv nævner så er det ikke så nemt at få en C++ DLL til at kalde en C# DLL, derfor ville jeg prøve at lave min DLL i C# så jeg derved kom uden om det problem.

Jeg har lavet flg. C++ DLL blandt andet ud fra en skabelon i det program der kalder Dll’en og så er der vistnok en på eksperten der kom med nogle ideer. Der hvor jeg virkelig går i stå er hvordan jeg kalder en C# DLL ligesom det extern kald der er i C++.

Jeg ved ikke om det her kaster mere lys over land eller om det forvirre. :-) :-) 

#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <fstream>

char s;
char * buffer      = 0;
unsigned char * arg = 0;
const int STRMAX    = 255;

using namespace std;

extern "C" __declspec (dllexport) unsigned char* capital(long dummy, unsigned char* argument);

BOOL WINAPI DllMain( HINSTANCE hinstDll,
                          DWORD fdwRreason,
                          LPVOID plvReserved)
{
    switch (fdwRreason)
    {
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        return 1;

        case DLL_PROCESS_ATTACH:
           
            buffer = (char*)malloc(STRMAX*sizeof(char));
            if( NULL == buffer )
                return 0;
            else
                return 1;

        case DLL_PROCESS_DETACH:
          free(buffer);
          return 1 ;
    }

    return 0;
}
unsigned char* capital(long dummy, unsigned char* argument)
{
    arg = argument;
    return arg;
}
Avatar billede md_craig Nybegynder
20. februar 2007 - 12:29 #5
ok nu blev det lidt forvirende...

Jeg havde også forstået det som Arne, altså at du havde en C# Dll du ønskede at kalde fra C++... men nu er jeg i tvivl...

Ønsker du at kalde en C# Dll fra C++?, i såfald skal du exponere et COM interface fra din C# Dll, dette kan godt lade sig gøre så vidt jeg er bekendt med. (Funger hvertfald fint med VB6 der kalder en C# Dll.
- http://www.codeproject.com/dotnet/bridge.asp (kunne ikke lige finde nogen bedre :S)

Ønsker du at kalde en C++ Dll fra C#?, i såfald kan du wrappe din C++ Dll ganske fint, igen COM interop.
- eks: http://www.adp-gmbh.ch/csharp/call_dll.html

Ønsker du at implementere hele din C++ Dll som C# istedet?... hvis din DLL er lille er dette måske ganske fint, men ville som regel nok bare wrappe den.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester