Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie mittels P/Invoke von externer DLL auf Pfad zugreifen?
cagli
myCSharp.de - Member



Dabei seit:
Beiträge: 3
Herkunft: Pforzheim

Themenstarter:

Wie mittels P/Invoke von externer DLL auf Pfad zugreifen?

beantworten | zitieren | melden

Guten Tag liebe Freunde,
wir haben ein Modul, dass wir in unserem Programm einfügen wollen. Die Verbindung zum API steht. Dieser versucht dann auf den angegebenen Pfad zuzugreifen, aber da kommt dauernd eine Fehlermeldung, dass er das Dokument nicht findet.


Wir benutzen Visual Studio 2017
.NET Framework 4.7.1


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text; 
using System.Windows.Forms;

namespace WindowsFormsApp64
{
    public partial class Form1 : Form
    {
        [DllImport("bkz_unp.dll" , CharSet = CharSet.Unicode)]
        //public static extern int unpack_bkz(string  a, string b);
        public static extern int unpack_bkz(char[] a, char[] b);

        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        { 
     
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string sentence = "C:\\Cemal\\hoop.kpr";
            var  charArr = sentence.ToCharArray();

            foreach (char ch in charArr)
            {
                // MessageBox.Show(ch.ToString());
            }

            sentence = "C:\\Cemal\\Caglar.txt";
            var  charArr2 = sentence.ToCharArray();

            //string aa  = @"C:\Cemal\bkz_2004.kpr";
            //string bb = @"C:\Cemal\caglar.txt";  

            int aaaa = unpack_bkz(charArr, charArr2);
        }
    }
}




Im ANhang stehen die Anforderungen


ich kriege die Rückmeldung 3, dies bedeutet, dass er nicht auf bkz_2004.kpr zugreifen kann. Ist meine Pfadangabe falsch?
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von cagli am .
Attachments
private Nachricht | Beiträge des Benutzers
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 511
Herkunft: Münster

beantworten | zitieren | melden

Zitat von cagli
ich kriege die Rückmeldung 3, dies bedeutet, dass er nicht auf bkz_2004.kpr zugreifen kann. Ist meine Pfadangabe falsch?

Was soll "Rückmeldung 3" sein? Wie lautet die genaue Fehlermeldung und in welcher Zeile tritt sie auf? Was sagt die Beschreibung/Dokumentation der API zu dem Problem?
private Nachricht | Beiträge des Benutzers
cagli
myCSharp.de - Member



Dabei seit:
Beiträge: 3
Herkunft: Pforzheim

Themenstarter:

beantworten | zitieren | melden

habe ich gerade beigefügt :)
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15675
Herkunft: BW

beantworten | zitieren | melden

Dein PInvoke ist völlig falsch.

Das Äquivalent von einem Char Pointer ist kein Char-Array sondern ein String.
Also das, was auskommentiert ist.

Vermutlich brauchst Du auch ein MarshalAs, außer Du hast wirklich ein COM Style String was ich bezweifle.
Siehe dazu Default Marshaling for Strings und Marshaling Data with Platform Invoke

PS: bitte nächstes Mal den richtigen Forenbereich wählen. Danke.
[Hinweis] Wie poste ich richtig?
private Nachricht | Beiträge des Benutzers
cagli
myCSharp.de - Member



Dabei seit:
Beiträge: 3
Herkunft: Pforzheim

Themenstarter:

beantworten | zitieren | melden

Vielen Dank für die so schnelle Antwort vom Team. Okay kommt nicht mehr vor. Ich bitte um Nachsicht weil ich recht neu bin und freue mich von euch was lernen zu können.

Info zu pinvoke für andere Interessenten:https://docs.microsoft.com/de-de/cpp/dotnet/how-to-call-native-dlls-from-managed-code-using-pinvoke?view=vs-2019
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15675
Herkunft: BW

beantworten | zitieren | melden

Alles gut, war soweit nur ein Hinweis.

Wäre noch gut, wenn Du die Lösung postest. Ich persönlich versteh auch den Hinweis auf die Docs nicht, wo da die Lösung sein soll - aber ich versteh auch nicht alles ;-)
private Nachricht | Beiträge des Benutzers