Laden...

Auf C-Funktionen zugreifen

Erstellt von Schnuki vor 16 Jahren Letzter Beitrag vor 16 Jahren 887 Views
S
Schnuki Themenstarter:in
126 Beiträge seit 2007
vor 16 Jahren
Auf C-Funktionen zugreifen

Hallo Leute,

ich hab mal eine frage bzw. ein Problem. Ich muss auf Funktionen zugreifen, die in einer C-Datei sind. Diese Funktionen geben mir einen Namen und eine Beschreibung zurück.

Als erstes Öffne ich die C-Datei so:

FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);

aber wir kann ich nur auf diese Funktionen zugreifen?
Kann mir da jemand helfen?

EDIT: Die Namen der beiden Funktionen sind gegeben... und die funktionen sehen folgender maßen aus:


void bsw_GetPlugInName(char *aPlugInName)
{
	printf("bsw_GetPlugInName(\"%s\")\n", BSW4MES_PLUGIN_NAME);

	strcpy(aPlugInName, BSW4MES_PLUGIN_NAME);
}

\***********************************

void bsw_GetPlugInDescription(char *aDescription)
{
	char szDescription[300] = {0};
	
	strcpy(szDescription, "Template for building up first BSW4MES prototype");

	printf("bsw_GetPlugInDescription(\"%s\")\n", szDescription);
	
	strcpy(aDescription, szDescription);
}



6.862 Beiträge seit 2003
vor 16 Jahren

So gehts gar nicht, du musst den erzeugten Code per DLLImport einbinden. Dazu gibts hier ne Menge Themen im Forum.

Baka wa shinanakya naoranai.

Mein XING Profil.

S
Schnuki Themenstarter:in
126 Beiträge seit 2007
vor 16 Jahren

Ja ok....

aber mein problem ist, dass ich nacheinander mehrere dlls aufrufen muss...bzw. importieren muss.
die dlls speicher ich in einem array und auf die dlls muss ich zugreifen...
aber wie mach ich das dann, dass ich nacheinander jede dll aufruf und mir den namen und die beschreib hol?

308 Beiträge seit 2005
vor 16 Jahren

Ja ok....

aber mein problem ist, dass ich nacheinander mehrere dlls aufrufen muss...bzw. importieren muss.

Kein Problem. Da es sich um Plugins zu handeln scheint geht es wohl um late-binding. Schau dir die Doku zu LoadDll an... Das Handle kann dann in ein Array...

mehr dazu: LateBinding C#

/c

Gelöschter Account
vor 16 Jahren

kannst du mal den code posten wo du die dll´s in das von dir besagte array lädst?

S
Schnuki Themenstarter:in
126 Beiträge seit 2007
vor 16 Jahren

kannst du mal den code posten wo du die dll´s in das von dir besagte array lädst?

Hier durchsuch ich den Ordner, der mir übergeben wurde nach DLLs... diese Speicher ich dann in eine HashMap und in ein Array speicher ich den Pfad!


public static void getCustomFiles(string path, string searchString)
        {
            //Durchsucht den Ordner nach Dlls und speichert sie in eine Hashmap
            DirectoryInfo myDir = new DirectoryInfo(path);
            FileSystemInfo[] myFSInfo = myDir.GetFileSystemInfos();

            foreach (FileSystemInfo i in myFSInfo)
            {
                if (i is DirectoryInfo)
                {
                    DirectoryInfo subDir = (DirectoryInfo)i;
                    string subdirPath = subDir.FullName;
                    getCustomFiles(subdirPath, searchString);
                }
                else if (i is FileInfo)
                {
                    FileInfo myFinfo = (FileInfo)i;
                    if (string.Compare(i.Extension.Trim('.'), searchString.Trim('.'), true) == 0)
                    {
                        if (linkStore.ContainsKey(i.Name) == false)
                        {
                            linkStore.Add(i.Name, i.FullName);
                            files++;
                        }
                    }
                }
            }

            //Duchsucht die Hashmap und speichert alle Pfade, die gefunden wurden in ein Array
            int x = 0;
            foreach (string name in linkStore.Keys)
            {
                dateien[x] = Convert.ToString(linkStore[name]);
                x++;
            }
}

und der pfad der dlls, die in dem Array sind muss ich inportieren... und das können mehrere sein!

Gelöschter Account
vor 16 Jahren

hm... da musst du dir eine c++ dll schmieden, über die du dann diese dll´s zur laufzeit importieren kannst.

das geht nur mit latebinding (siehe bereits geposteten link)