[C/C#] P/Invoke naar eigen DLL

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • HMS
  • Registratie: Januari 2004
  • Laatst online: 21-08 23:06
Ik heb een probleem met het aanroepen van een C# applicatie naar een C DLL.

Het probleem zit hem volgens mij in het feit dat er te weinig informatie in de DLL is over waar de entry points staan.

Een dumpbin /exports geeft mij:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Microsoft (R) COFF/PE Dumper Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file Smoke.dll

File Type: DLL

  Summary

        2000 .data
        3000 .rdata
        2000 .reloc
        1000 .rsrc
       4B000 .text


De code ziet er grofweg zo uit:

C#:
1
2
        [DllImport("Smoke", EntryPoint = "init_simulation")] //EntryPoint is overbodig hier, weet ik.
        public static extern void init_simulation(int x);


C:
1
2
3
void init_simulation(int n) {
 //Doe dingen
}


en de functie call in C# is natuurlijk:

C#:
1
init_simulation(0);


De foutmelding die ik krijg is:

"Unable to find an entry point named 'init_simulation' in DLL '<dll naam>'.

Ik heb gegoogled, maar alle informatie die ik kan vinden over DLLImport of P/Invoke gaat over het aanroepen van Win32 API's.

Terwijl ik mijn aanroepen op een custom DLL doe (waarvan ik beschik over de source).

Ik heb al geprobeerd om een extern definitie in een header file te gooien en die mee te compilen, maar dat hielp ook niks.

Iemand die mij verder kan helpen?

Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 15-09 16:19

alienfruit

the alien you never expected

Moet je de functie ook niet exporten in je .dll?

Acties:
  • 0 Henk 'm!

  • CyBoB
  • Registratie: Januari 2001
  • Laatst online: 25-08 22:04

CyBoB

.::BURB::.

__declspec(dllexport) voor je functie zetten vergeten?

Je moet aangeven welke functies/classes geëxporteerd moeten worden. Dependency Walker is altijd handig om te zien welke functies geëxporteerd zijn door een dll.

Een alternatief is om een .def file te gebruiken. Volgens mij heet het in VS iets van Module Definition File.

Zie anders ook MSDN: Walkthrough: Creating and Using a Dynamic Link Library

[edit]
of hier MSDN: dllexport, dllimport (C++)

[ Voor 11% gewijzigd door CyBoB op 16-09-2011 12:03 ]


Acties:
  • 0 Henk 'm!

  • HMS
  • Registratie: Januari 2004
  • Laatst online: 21-08 23:06
Mijn dank is groot :). het toevoegen van __declspec(dllexport) voor de functie definitie heeft mijn probleem opgelost.

(dit dus)

C:
1
2
3
__declspec(dllexport) void init_simulation(int n) {
 //Doe dingen
}