【问题标题】:creating a dll file in code::blocks and using it in powerpoint 2007在 code::blocks 中创建一个 dll 文件并在 powerpoint 2007 中使用它
【发布时间】:2014-01-05 15:30:45
【问题描述】:

我已经厌倦了在代码块中创建一个 dll 文件,然后在我的 powerpoint 演示文稿中使用它。在我下面提到的 dll 文件中,函数的参数包含 (LPCSTR)

 void DLL_EXPORT SomeFunction(const LPCSTR sometext)
{
MessageBoxA(0, sometext, "  DLL Message  ", MB_OK | MB_ICONINFORMATION);
}

在我的PowerPoint文件中,我有

Declare Function DLL_EXPORT _
Lib "myfile.dll" _
Alias "SomeFunction" (???)  

当我运行文件时,我得到
因为我不知道如何在 powerpoint 中定义我的函数的参数。我的意思是这部分代码:

 Alias "SomeFunction" (???)

【问题讨论】:

  • Declare Function SomeFunction Lib "myfile.dll" Alias "SomeFunction" (ByVal sometext As String)。还要确保你的原生 SomeFunction 使用 Pascal 调用约定。另请参阅Anatomy of a Declare Statement。
  • 我已经使用 ByVal sometext As String 但它不起作用。但我不确定调用该函数。我只是举例:DLL_EXPORT ("Hello World")
  • DLL_EXPORT 不是函数名。它是一个 C++ 宏,可以为 DLL 实现和该 DLL 的客户端启用相同的头文件。它可能扩展到extern "C"。调用约定应指定为:DLL_EXPORT void __stdcall SomeFunction(const LPCSTR sometext).
  • dll 文件的其余代码是:extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { some codes here ... return TRUE; }
  • 感谢@IInspectable 的帮助。我从以下电影中得到了一些想法 [youtube.com/watch?v=fzO9L6tlXDI]

标签: c++ dll powerpoint codeblocks declare


【解决方案1】:

您的 C++ 代码使用了错误的调用约定。应该是:

__declspec(dllexport) void __stdcall SomeFunction(const char* sometext)

如果您愿意,可以使用 DLL_EXPORT、APIENTRY、LPCSTR 等宏。但是,至少在您知道宏的全部含义之前,它可能更容易明确,如上所示。

您的函数的正确 VBA 声明是:

Declare Sub SomeFunction Lib "myfile.dll" (ByVal sometext As String)

但是,仅此还不够,因为您的函数将受到名称修饰和修饰的影响。您可以使用 dumpbin 或 Dependency Walker 查看导出函数的实际名称。那么你的 VBA 声明需要像这样修改:

Declare Sub SomeFunction Lib "myfile.dll" Alias "<DecoratedNameHere>" (ByVal sometext As String)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多