2011-12-03 72 views
1

我需要在64位Excel中調用DLL才能在VBA中使用。 i。)我被告知我無法在64位程序中使用32位dll,這是真的嗎? ii))有誰知道他們知道正在演示如何將一個dll加載到VBA中的示例。在64位Excel中調用C DLL以便在VBA中使用

目前他們甚至沒有加載。我可以在C++中調用DLL。

示例代碼如下,在64位模式下編譯得很好。我試過註冊功能。 VBA的錯誤是「編譯錯誤:預期LIB」

失敗調用函數在VBA

Public Declare PtrSafe Function getNumber_Lib "C:\Users\james.allsop\Documents\Visual Studio 2010\Projects\DynamicLibrary\x64\Debug\MathFuncsDll.dll"() As Integer 

以下所有編譯和運行。

MathFuncsDll.h

// MathFuncsDll.h 
// Returns a + b 
__declspec(dllexport) double Add(double a, double b); 
// Returns a - b 
__declspec(dllexport) double Subtract(double a, double b); 
// Returns a * b 
__declspec(dllexport) double Multiply(double a, double b); 
// Returns a/b 
// Throws DivideByZeroException if b is 0 
__declspec(dllexport) double Divide(double a, double b); 
__declspec(dllexport) double getNumber(); 

MathFuncsDll.cpp

#include "MathFuncsDll.h" 
double Add(double a, double b) 
{ 
    return a + b; 
} 

double Subtract(double a, double b) 
{ 
    return a - b; 
} 

double Multiply(double a, double b) 
{ 
    return a * b; 
} 

double Divide(double a, double b) 
{ 
    if (b == 0) 
    { 
    return -1.0; 
    } 
    return a/b; 
} 

double getNumber() 
{ 
    return 1000; 
} 

MyExecRefsDll.cpp

// MyExecRefsDll.cpp : Defines the entry point for the console application. 
// 
// MyExecRefsDll.cpp 
// compile with: /EHsc /link MathFuncsDll.lib 

#include <iostream> 
// Returns a + b 
__declspec(dllimport) double Add(double a, double b); 

// Returns a - b 
__declspec(dllimport) double Subtract(double a, double b); 

// Returns a * b 
__declspec(dllimport) double Multiply(double a, double b); 

// Returns a/b 
// Throws DivideByZeroException if b is 0 
__declspec(dllimport) double Divide(double a, double b); 
__declspec(dllimport) double getNumber(); 

int main() 
{ 
    double a = 7.4; 
    int b = 99; 
    std::cout << "a + b = " << Add(a, b) << "\n"; 
    std::cout << "a - b = " << Subtract(a, b) << "\n"; 
    std::cout << "a * b = " << Multiply(a, b) << "\n"; 
    std::cout << "a/b = " << Divide(a, b) << "\n"; 
    return 0; 
} 

任何幫助將不勝感激! James

回答

2

您在VBA中的聲明包含錯誤。它應該是:的

Public Declare PtrSafe Function getNumber Lib "C:\Users\james.allsop\Documents\Visual Studio 2010\Projects\DynamicLibrary\x64\Debug\MathFuncsDll.dll"() As Integer 

代替:

Public Declare PtrSafe Function getNumber_Lib "C:\Users\james.allsop\Documents\Visual Studio 2010\Projects\DynamicLibrary\x64\Debug\MathFuncsDll.dll"() As Integer 

注意刪除下劃線。

是的,你不能從64位應用程序調用32位DLL,反之亦然。這是所有應用程序的一般限制,而不僅限於VBA或Excel。

+0

謝謝,沒有看到它由於編輯中的下劃線。謝謝,並感謝您直接在32/64位部分設置我。還發現你需要一個def文件。出口是不夠的。 – James

相關問題