我正在尝试使用visual studio 2015从C ++代码创建DLL。
我有一个DLL_Tutorial.h文件:
#ifndef _DLL_TUTORIAL_H_
#define _DLL_TUTORIAL_H_
#include <iostream>
extern "C"
{
DECLDIR int Add( int a, int b );
}
#endif
\\
\然后我创建了一个DLL_Tutorial.cpp
#include <iostream>
#include "DLL_Tutorial.h"
#define DLL_EXPORT
extern "C"
{
__declspec(dllexport) int Add(int a, int b)
{
return(a + b);
}
}
我有一个Dll文件
我想在VBA中调用我的函数并将其应用于excel表
所以在VBA中我做了:
Public Declare Function Add _
Lib "C:\Users\hasna\Desktop\Projet VBA-C++\projet5\Debug\projet5.dll" (byval a As integer,byval b As integer) As integer
然后在excel表中,我输入2个值(例如6和4)我调用add function但它给了我:#VALEUR!
问题出在哪里? 你能帮我解决一下吗
由于
答案 0 :(得分:1)
在您的DLL头文件中,您似乎没有使用__declspec(dllexport)为导出的API添加前缀。通常定义哪个API以便在构建DLL时使用__declspec(dllexport),以及在外部项目中使用标头时使用__declspec(dllimport)。最好的方法是使用VS 2015项目模板创建DLL,它包含正确的标题和导出定义,因此您只需要专注于编写API。以下是VS 2015项目的一个工作示例:
示例* .h:
#pragma once
// The following ifdef block is the standard way of creating macros which make exporting
// from a DLL simpler. All files within this DLL are compiled with the DLLAPI_EXPORTS
// symbol defined on the command line. This symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see
// DLLAPI_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.
#ifdef DLLAPI_EXPORTS
#define DLLAPI_API __declspec(dllexport)
#else
#define DLLAPI_API __declspec(dllimport)
#endif
// This is an example of an exported function.
DLLAPI_API int fnDLLAPI(void);
示例* .cpp:
// DLLAPI.cpp : Defines the exported functions for the DLL application.
//
#include "DLLAPI.h"
// This is an example of an exported function.
DLLAPI_API int fnDLLAPI(void)
{
return 42;
}
Windows Via C / C ++书籍也是编写DLL的非常好的资源。现在关于VB导入,我不确定因为我不熟悉通过VB导入API。