Probleem:
Ik wil een C++ functie gebruiken binnen excel middels een DLL. Ik krijg het echter niet voor elkaar om de argumenten goed door te geven. Het minimale voorbeeld waarbij het probleem ontstaat, heb ik gevangen in onderstaande code. Excel versie is 2010 64-bit en de DLL wordt ook als x64 gecompileerd.

De code in C++:
Ik heb allerlei combinaties geprobeerd (as integer, as long, as longPtr), (ByRef, ByVal) maar overal blijft de uitkomst gewoon op 0 staan. Waarschijnlijk is het weer iets heel knulligs
maar ik kom er niet uit... Iemand die zo ziet waar het mis gaat?
Ik wil een C++ functie gebruiken binnen excel middels een DLL. Ik krijg het echter niet voor elkaar om de argumenten goed door te geven. Het minimale voorbeeld waarbij het probleem ontstaat, heb ik gevangen in onderstaande code. Excel versie is 2010 64-bit en de DLL wordt ook als x64 gecompileerd.

De code in C++:
C++: main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| extern "C" __declspec(dllexport) int getNumber(); extern "C" __declspec(dllexport) int doubleNumber(int inputNumber); extern "C" __declspec(dllexport) int doubleNumberFake(int inputNumber); int getNumber() { return 1000; } int doubleNumber(int inputNumber) { int outputNumber = inputNumber * 2; return outputNumber; } int doubleNumberFake(int inputNumber) { return 2000; } |
C++: main.def
1
2
3
4
5
| LIBRARY "ExcelAddin" EXPORTS getNumber=getNumber doubleNumber=doubleNumber doubleNumberFake=doubleNumberFake |
Visual Basic: VBA module code
1
2
3
4
5
| #If Win64 Then Public Declare PtrSafe Function getNumber Lib "D:\ExcelAddin.dll" () As Long Public Declare PtrSafe Function doubleNumber Lib "D:\ExcelAddin.dll" (ByVal arg As Long) As Long Public Declare PtrSafe Function doubleNumberFake Lib "D:\ExcelAddin.dll" (ByVal arg As Long) As Long #End If |
Ik heb allerlei combinaties geprobeerd (as integer, as long, as longPtr), (ByRef, ByVal) maar overal blijft de uitkomst gewoon op 0 staan. Waarschijnlijk is het weer iets heel knulligs

“A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away.” —Antoine De Saint-Exupery