我是初学者,我刚刚在c ++中构建了一个包含dll的项目。该项目由2个子项目组成:
Rational.h
#pragma once
class Rational
{
private:
int num;
int den;
public:
Rational(int num_, int den_);
Rational();
double getValue();
};
Rational.cpp
#include "Rational.h"
Rational::Rational()
{
}
Rational::Rational(int num_, int den_) : den(den_), num(num_)
{
}
double Rational::getValue()
{
return (double)num / (double) den;
}
Proxy.h
#pragma once
#define DLL_EXPORT __declspec(dllexport)
extern "C"
{
DLL_EXPORT double __stdcall getRationalValue(int num_, int den_);
}
Proxy.cpp
#include "Proxy.h"
#include "Rational.h"
DLL_EXPORT double __stdcall getRationalValue(int num_, int den_)
{
Rational fraction(num_, den_);
return fraction.getValue();
}
dll函数用于Excel文件。以下是要使用的函数的声明:
Declare PtrSafe Function getRationalValue_vba Lib "C:\...\Documents\Visual Studio 2013\Projects\Rational\x64\Debug\RationalDll.dll" Alias "getRationalValue" (ByVal num As Long, ByVal den As Long) As Double
为了测试这个功能,我在vba中有以下子项:
Sub test()
shtTests.Cells(1, 1) = getRationalValue_vba(4, 5)
End Sub
似乎工作正常。
当我想从Visual Studio启动调试器时,会出现此问题。 在visual studio项目中:
属性>调试>命令已设置为Excel.exe本地化。
我在"返回"设置了一个断点。 proxy.cpp文件的行。 当我启动调试器时,excel打开很好。但是,当我执行sub test()时,视觉中的断点永远不会到达,应用程序崩溃。
你能帮我理解这个问题吗?