Avatar billede sw_red_6 Nybegynder
08. oktober 2004 - 09:01 Der er 11 kommentarer og
1 løsning

Output fra C# til C++

Det kan muligvis være det forkerte sted at stille dette spørgsmål, men hvis man har et GUI lavet i C# med nogle input-felter som skal udfyldes af brugeren, er det så muligt at bruge disse input i unmanaged C++? Det ville være en stor hjælp hvis jeg kunne få eksempler eller nogle links til eksempler.
Avatar billede arne_v Ekspert
08. oktober 2004 - 11:15 #1
Du kan sagtens compile unmanaged C++ til en Win32 DLL og kalde den
kode fra din C# kode.
Avatar billede arne_v Ekspert
08. oktober 2004 - 11:18 #2
Jeg har et meget banalt eksempel med kald C# -> C++ og overførsel af strenge.
Avatar billede arne_v Ekspert
08. oktober 2004 - 11:19 #3
strdll.h
--------

#ifdef STRDLL_EXPORTS
#define STRDLL_API __declspec(dllexport)
#else
#define STRDLL_API __declspec(dllimport)
#endif

extern "C"
{
STRDLL_API char *dup(char *s);
}

strdll.cpp
----------

#include "stdafx.h"
#include "StrDLL.h"

BOOL APIENTRY DllMain( HANDLE 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;
}

static char buf[100];

STRDLL_API char *dup(char *s)
{
    strcpy(buf,s);
    strcat(buf,s);
    return buf;
}

Test.cs
-------

using System;
using System.Runtime.InteropServices;

class MainClass
{
    [DllImport("D:\\IDEProjects\\VisualStudio\\StrDLL\\Release\\StrDLL.dll")]
    private static extern string dup(string s);
    public static void Main(string[] args)
    {
        string s1 = "abc";
        string s2 = dup(s1);
        Console.WriteLine(s1 + "->" + s2);
    }
}
Avatar billede sw_red_6 Nybegynder
08. oktober 2004 - 11:39 #4
Ahh, det ser jo egentlig ret enkelt ud.
Skal lige se om jeg har forstået det ordenligt.
Det er muligt at sende variabler eller pointere til variabler til funktioner i en dll på samme måde som man kan sende variabler eller pointere til funktioner i en klasse i ens projekt. Har jeg ret?
Avatar billede arne_v Ekspert
08. oktober 2004 - 11:57 #5
Ja.

Der er visse finesser som kan drille. Men simple data typer er rimeligt nemme.
Avatar billede sw_red_6 Nybegynder
08. oktober 2004 - 12:06 #6
Ja, men der vil næsten altid være små finesser som kan drille, men det kan man vel med lidt logisk tænkning fikse selv ;).

Jeg går ud fra at de finesser du snakker om er hvis det er struct eller class der bliver brugt i overførslen.

Har du forresten set det her:
http://www.codeproject.com/managedcpp/Quake2.asp
Det er Quake 2 omskrevet til managed C++ og i følge udviklerne kører det med 85% af native C++(unmanaged tror jeg det er, men de skriver native). De siger så også at man ikke kan mærke den forskel, så det betyder vel at der bliver brugt lidt flere resourcer på at køre .NET versionen i forhold til den originale.

hvis du tilføjer et svar så får du pointene.
Avatar billede sw_red_6 Nybegynder
08. oktober 2004 - 12:13 #7
jeg glemte lige at spørge om den sti du har skrevet i DllImport(), hvorfor bruger du to backslash \\ mellem mapperne?
Avatar billede arne_v Ekspert
08. oktober 2004 - 13:04 #8
svar
Avatar billede arne_v Ekspert
08. oktober 2004 - 13:05 #9
Man skal enten bruge "...\\..." eller @"...\..." i C# fordi \ jo bruges til
at escape med.
Avatar billede sw_red_6 Nybegynder
08. oktober 2004 - 13:06 #10
nåja det havde jeg lige glemt.Uuups
Avatar billede arne_v Ekspert
08. oktober 2004 - 13:07 #11
I mange slags kode vil C# køre lige så hurtigt som C++.

C++ vinder kun hvis den kan lave nogle genveje ved noget low level kode
såsom pointer manipulation.

[ja man kan også bruge unsafe i C#, men hvorfor vælge C# hvis man vil det]
Avatar billede arne_v Ekspert
08. oktober 2004 - 13:08 #12
Det vigtigste du skal være opmærksom på er at brug af garbage collection
(som .NET managed kode bruger) giver dårligere real time egenskaber.
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