L'exportation de fonctions de dll C++ C# P/Invoke

J'ai construit une dll C++ que je voudrais appeler du code C#. Je suis en mesure d'appeler une fonction, mais l'autre déclenche une exception lorsque le code C# essaie de charger la dll.

L'en-tête ressemble à ceci:

extern "C" __declspec(dllexport) BOOL Install();
extern "C" __declspec(dllexport) BOOL PPPConnect();

Ce qui produit une dll avec un peu déconcertantes, les exportations de la table (ce qui n'foo = foo dans le champ nom?):

File Type: DLL

Section contains the following exports for PPPManager.dll

00000000 characteristics
499F44F0 time date stamp Fri Feb 20 16:04:00 2009
    0.00 version
       1 ordinal base
       2 number of functions
       2 number of names

ordinal hint RVA      name

      1    0 000078E4 Install = Install
      2    1 000079DC PPPConnect = PPPConnect

Mes déclarations P/Invoke ressembler à ceci:

[DllImport("PPPManager.dll")]
private static extern bool Install();

[DllImport("PPPManager.dll")]
private static extern bool PPPConnect();

L'appel à Installer retourne sans exception, mais quand je l'appelle PPPConnect, je reçois un MissingMethodException - "impossible de trouver un Point d'Entrée 'PPPConnect" dans un PInvoke DLL "PPPManager.dll'."

J'ai essayé de l'enlever externes et declspec directives de l'Installer déclaration de la fonction, de sorte que PPPConnect est la seule fonction exportée, et ce n'est toujours pas laissez-moi appeler PPPConnect.

J'ai aussi essayé de faire la DllImport par ordinal; cela donne le même résultat que l'appelant par son nom - Installer les rendements, mais PPPConnect lève l'exception "ne Peut pas trouver un Point d'Entrée '#2'...".

L'interopérabilité journal donne:

[pinvokeimpl][preservesig]
bool  invivodata.Common.System.IPAQUtils::Install();
BOOLEAN (I1_WINBOOL_VAL) Install();

JIT ERROR FOR PINVOKE METHOD (Managed -> Native): 
[pinvokeimpl][preservesig]
bool  invivodata.Common.System.IPAQUtils::PPPConnect();
BOOLEAN (I1_WINBOOL_VAL) PPPConnect();

C'est bien en dehors de mon domaine d'expertise, donc des suggestions ou des idées seraient les bienvenues.

Grâce,
Paul

edit:
Il s'avère que ce code fonctionne, le problème était avec la dernière dll pas être reproduit à l'appareil. Oh pinaise!

Je n'ai jamais entendu parler de cette interop journal - comment activer/view?
blogs.msdn.com/netcfteam/archive/2005/07/24/442609.aspx j'ai juste commencé à l'utiliser pour essayer et déboguer ce problème, mais il me semble qu'il m'aurait sauvé beaucoup de temps de débogage MissingMethodExceptions.

OriginalL'auteur Symmetric | 2009-02-21