创建供Excel和C#使用的C++ .dll(32/64位窗口)
Creating C++ .dll for use by Excel & C# (32/64bit Window)
最近我想开始用Visual c++ Express 2010构建一个。dll数学库。
我想使用。dll作为Excel VBA
&C#
应用程序。我希望它将在两个32bit/64bit
窗口工作。.dll也应该能够在构建后由其他PC使用。
-
我是正确的开始使用Win32项目?(似乎我不能使用
ATL / MFC
在Express版本) -
我需要在.dll中指定2套不同的VBA接口吗?c#加载函数?(VBA要求使用__stdcall)
-
在其他PC上使用.dll的任何部署设置?(需要任何regsvr32 cmd进程吗?)
-
任何初学者的例子,使一个c++ DLL导出类?(例如VBA/c#可以从这个dll实例化一个新类)…
因为我不确定我是否可以实例化ClassA &VBA/c#中的类b, c++ .dll中的头文件如下:
#pragma once
#ifdef DLLDIR_EX
#define DLLDIR __declspec(dllexport) // export DLL information
#else
#define DLLDIR __declspec(dllimport) // import DLL information
#endif
class DLLDIR ClassA
{
public:
void AMethod1();
void AMethod2();
};
class DLLDIR ClassB
{
public:
void BMethodi();
void BMethodii();
};
您不能使用c++构建导出COM类型或C风格函数的DLL文件,并使其在32位和64位环境中都能工作。DLL文件是一种PE/COFF映像,PE只支持每个文件一个ISA(与Macintosh可执行格式相比,它允许在同一个映像文件中包含多个ISA)。您必须重新编译两次,一次针对x86,另一次针对x64。这条规则的唯一例外是。net"AnyCPU"dll,但那是另一回事。
根据这个比较表,c++ Express 2010不包括x64编译器,也不包括MFC和ATL库,尽管您可以将它们作为Windows SDK的一部分单独下载。
回答你的问题:
- 就我个人而言,我会从"空项目"模板开始——我不喜欢Win32模板提供的所有不必要的标题和(看似)复杂的初始项目设置。然后我自己手动添加我自己的。c/.h/.cpp文件并编码。
- 如果你只是导出函数而不是COM类型,那么你不需要担心接口。只要你的函数被正确导出(见这里:http://msdn.microsoft.com/en-us/library/ys435b3s%28v=vs.80%29.aspx),然后他们可以从。net(包括c#和VB.NET)和VB6/VBA,和C/c++调用。
- "其他个人电脑"?
关于#2,您不需要两组接口,因为c#也可以使用__stdcall调用约定。
相关文章:
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 64 位进程中的 AnyCPU C# DLL 无法引用 64 位C++ DLL(给出错误:无法加载文件或程序集)
- 从C/C++(Win64)中的内存加载64位DLL
- 自从迁移到 64 位以来,我在随机 glVertexAttribArray 调用中收到来自 nvoglv64.dll 的
- Windows API "CreateWindowEx" 在 Python (3.6.8) 64 位使用的 DLL 中工作吗?
- #VALUE!在 64 位 Excel 中调用 DLL 函数 (C++) 时
- 在64位DLL中访问函数的错误
- 如何在 64 位窗口中加载 32 位 DLL
- 如何为64位应用程序注册.NET DLL
- 调用64位C/C++DLL的C#应用程序崩溃,但运行32位版本
- 制定目标需要32和64位的DLL构建
- 无法使用 dyn.load windows 7 64 位在 R 中加载 dll 文件
- MSVCR120.dll的无效参数错误(在64位窗口中构建Tesseract Lib)
- Windows无法看到64位dll
- 64位DLL中的CreateThread不起作用
- 如何以编程方式检测 DLL 是在 .NET 中编译为 32 位还是 64 位
- 如何在 64 位 DLL 中查找导出函数的地址?
- Visual Studio将非托管的64位DLL复制到SysWOW64,而不是System32
- VS2012正在查找64位dll而不是32位
- 如何使用P/Invoke从64位C#应用程序调用64位C++DLL