Avatar billede lau_r Nybegynder
26. marts 2004 - 16:00 Der er 15 kommentarer og
1 løsning

C++ dll-kald syntaks oversættelse

Jeg skal kalde følgende metode fra mit C# program:
char* DetectSerialPort(char* buffer);

Hvordan gør jeg det?
Mit bedste bud er:
[DllImport("CFReader.dll")]
Public static extern char DetectSerialPort(char Buffer);

Men det giver en fejl.
Avatar billede arne_v Ekspert
26. marts 2004 - 16:05 #1
char* er string
Avatar billede lau_r Nybegynder
26. marts 2004 - 16:31 #2
Jeg får stadig fejl. Hvad er galt med dette?:

[DllImport("CFReader.dll")]
public static extern string DetectSerialPort(string Buffer);
       
public string DetectPort()
{
    string CC="";
    string c=DetectSerialPort(CC);
    return c;
}
Avatar billede arne_v Ekspert
26. marts 2004 - 17:40 #3
Hvilken fejl ?
Avatar billede lau_r Nybegynder
26. marts 2004 - 17:42 #4
NotSupportedException
Avatar billede arne_v Ekspert
26. marts 2004 - 19:04 #5
Hmm

Den vil ikke acceptere en string som function result.

Der skal fuskes med en IntPtr.
Avatar billede arne_v Ekspert
26. marts 2004 - 20:06 #6
Mere hmmm

Det virker faktisk på begge måder hos mig !
Avatar billede arne_v Ekspert
26. marts 2004 - 20:06 #7
extern "C"
{
STRDLL_API char *dup(char *s);
}
Avatar billede arne_v Ekspert
26. marts 2004 - 20:07 #8
[DllImport("D:\\IDEProjects\\VisualStudio\\StrDLL\\Release\\StrDLL.dll")]
    private static extern IntPtr dup(string s);

        string s1 = "abc";
        string s2 = Marshal.PtrToStringAnsi(dup(s1));
Avatar billede arne_v Ekspert
26. marts 2004 - 20:07 #9
[DllImport("D:\\IDEProjects\\VisualStudio\\StrDLL\\Release\\StrDLL.dll")]
    private static extern string dup(string s);


        string s1 = "abc";
        string s2 = dup(s1);
Avatar billede arne_v Ekspert
26. marts 2004 - 20:08 #10
Men prøv med IntPtr tricket og se om det virker.
Avatar billede lau_r Nybegynder
27. marts 2004 - 15:41 #11
PtrToStringAnsi findes ikke i Compact Frameworket.
[DllImport("CFReader.dll")]
public static extern IntPtr DetectSerialPort(string Buffer);
string a="abc";
string b=Marshal.PtrToStringUni(DetectSerialPort(a));

giver en System.MissingMethodException.
Hvad kan jeg gøre?
Avatar billede arne_v Ekspert
27. marts 2004 - 18:16 #12
Compact ?

Så er jeg lidt på bar bund ...
Avatar billede lau_r Nybegynder
28. marts 2004 - 15:12 #13
Nogen der ved hvorfor PtrToStringUni ikke virker?
Compact Frameworket er bare en skrapet udgave af .NET
Avatar billede lau_r Nybegynder
02. april 2004 - 11:33 #14
Jeg har lige funde tud af at jeg får den samme fejl lige meget hvad jeg kalder dll-filen. Noget tyder på at den ikke finder filen. Jeg har kopieret filen over i den mappe programmet kører fra. Kræver det en registrering eller et andet trick at bruge en dll i Compact Frameworket??
Avatar billede arne_v Ekspert
12. april 2004 - 20:46 #15
Desværre - jeg kender ikke Compact.
Avatar billede lau_r Nybegynder
14. november 2006 - 11:55 #16
jeg lukker. kom aldrig videre.
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