2015-09-17 1 views
1

À l'origine, il a été posté ici (https://stackoverflow.com/questions/32617735/declared-dll-but-errors-external-function-not-found) mais a été informé de ne pas utiliser de classe ni d'espace de noms. Repose un exemple plus simple que je n'arrive toujours pas à faire.Déclaré Bonjour World DLL fichier. Fonction externe introuvable à l'exécution

DLL en C++ (Visual Studio):

// myFirstDLL.h 
#define DECLDIR __declspec(dllexport) 

DECLDIR int GIMMEFIVE(); 



// myFirstDLL.cpp 
#include "stdafx.h" 
#include "myFirstDLL.h" 
#include <stdexcept> 

//using namespace std; 

int GIMMEFIVE() 
{ 
    return 5; 
} 

LotusScript Agent:

Option Public 
Option Declare 

Declare Public Function GIMMEFIVE Lib "P:\Internet\dplows\visualstudio\myFirstDLL\myFirstDLL\Debug\myFirstDLL.dll"() As Integer 

Sub Initialize 
    MsgBox GIMMEFIVE() 

End Sub 
+0

Quelle convention d'appel est prévue par le script de lotus? – Niall

+0

@Niall, c'est très similaire à VB. Juste pour info, j'ai appelé avec succès les fonctions d'une DLL avant (clignotant la fenêtre actuelle dans la barre des tâches via user32.dll). Doit juste être quelque chose de mal avec le mien. – dplows

+0

[Cela peut aider] (http://www-01.ibm.com/support/knowledgecenter/#!/SSVRGU_9.0.1/com.ibm.designer.domino.main.doc/LSAZ_WORKING_WITH_EXTERNAL_C_LANGUAGE_FUNCTIONS.html). Vous pouvez également utiliser Dependency Walker pour afficher le nom de la fonction exportée. Je ne connais pas le script de voyants, mais VBA pourrait être difficile sur les noms de fonction (https://msdn.microsoft.com/en-us/library/aa235591(v=vs.60).aspx) – Niall

Répondre

3

La fonction doit être enveloppé dans extern "C" bloc;

extern "C" 
{ 
    extern __declspec(dllexport) int GIMMEFIVE(); 
} 
0

déclarerons comme les deux extern "C" et __declspec(dllexport). Si vous n'appelez pas la fonction vous-même depuis votre DLL, vous n'avez pas besoin de la transmettre. Vous pouvez le faire tous en ligne:

extern "C" __declspec(dllexport) int GIMMEFIVE() 
{ 
    return 5; 
}