<legend id='xwupN'><style id='xwupN'><dir id='xwupN'><q id='xwupN'></q></dir></style></legend>

<small id='xwupN'></small><noframes id='xwupN'>

<i id='xwupN'><tr id='xwupN'><dt id='xwupN'><q id='xwupN'><span id='xwupN'><b id='xwupN'><form id='xwupN'><ins id='xwupN'></ins><ul id='xwupN'></ul><sub id='xwupN'></sub></form><legend id='xwupN'></legend><bdo id='xwupN'><pre id='xwupN'><center id='xwupN'></center></pre></bdo></b><th id='xwupN'></th></span></q></dt></tr></i><div id='xwupN'><tfoot id='xwupN'></tfoot><dl id='xwupN'><fieldset id='xwupN'></fieldset></dl></div>

          <bdo id='xwupN'></bdo><ul id='xwupN'></ul>
        <tfoot id='xwupN'></tfoot>

      1. 从 C++ DLL 调用 Delphi 中的回调函数

        Calling a callback function in Delphi from a C++ DLL(从 C++ DLL 调用 Delphi 中的回调函数)
          <tbody id='QrJOc'></tbody>
          <bdo id='QrJOc'></bdo><ul id='QrJOc'></ul>
          1. <small id='QrJOc'></small><noframes id='QrJOc'>

                <legend id='QrJOc'><style id='QrJOc'><dir id='QrJOc'><q id='QrJOc'></q></dir></style></legend>

                <tfoot id='QrJOc'></tfoot>

                <i id='QrJOc'><tr id='QrJOc'><dt id='QrJOc'><q id='QrJOc'><span id='QrJOc'><b id='QrJOc'><form id='QrJOc'><ins id='QrJOc'></ins><ul id='QrJOc'></ul><sub id='QrJOc'></sub></form><legend id='QrJOc'></legend><bdo id='QrJOc'><pre id='QrJOc'><center id='QrJOc'></center></pre></bdo></b><th id='QrJOc'></th></span></q></dt></tr></i><div id='QrJOc'><tfoot id='QrJOc'></tfoot><dl id='QrJOc'><fieldset id='QrJOc'></fieldset></dl></div>
                • 本文介绍了从 C++ DLL 调用 Delphi 中的回调函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我编写了一个 C++ DLL,它有一个公开的函数,它将函数指针(回调函数)作为参数.

                  I have a C++ DLL that I wrote that has a single exposed function, that takes a function pointer (callback function) as a parameter.

                  #define DllExport   extern "C" __declspec( dllexport )
                  
                  DllExport bool RegisterCallbackGetProperty( bool (*GetProperty)( UINT object_type, UINT object_instnace, UINT property_identifer, UINT device_identifier, float * value ) ) {
                      // Do something. 
                  }
                  

                  我希望能够从 Delphi 应用程序中调用这个公开的 C++ DLL 函数并注册回调函数以供将来使用.但是我不确定如何在 Delphi 中创建一个可以与公开的 C++ DLL 函数一起使用的函数指针.

                  I want to be able to call this exposed C++ DLL function from within a Delphi application and register the callback function to be used at a future date. But I am unsure of how to make a function pointer in Delphi that will work with the exposed C++ DLL function.

                  我有 Delphi 应用程序调用一个简单的暴露的 c++ DLL功能 来自我在这个问题中得到的帮助.

                  I have the Delphi application calling a simple exposed c++ DLL functions from the help I got in this question.

                  我正在构建 C++ DLL,如果需要,我可以更改其参数.

                  I am building the C++ DLL and I can change its parameters if needed.

                  我的问题是:

                  • 如何在 Delphi 中创建函数指针
                  • 如何从 Delphi 应用程序中正确调用公开的 C++ DLL 函数,以便 C++ DLL 函数可以使用函数指针.

                  推荐答案

                  在 Delphi 中通过声明函数类型来声明函数指针.例如,您的回调函数类型可以这样定义:

                  Declare a function pointer in Delphi by declaring a function type. For example, the function type for your callback could be defined like this:

                  type
                    TGetProperty = function(object_type, object_instnace, property_identifier, device_identifier: UInt; value: PSingle): Boolean; cdecl;
                  

                  注意调用约定是 cdecl 因为你的 C++ 代码没有指定调用约定,而 cdecl 是 C++ 编译器通常的默认调用约定.

                  Note the calling convention is cdecl because your C++ code specified no calling convention, and cdecl is the usual default calling convention for C++ compilers.

                  然后你可以使用那个类型来定义DLL函数:

                  Then you can use that type to define the DLL function:

                  function RegisterCallbackGetProperty(GetProperty: TGetProperty): Boolean; cdecl; external 'dllname';
                  

                  'dllname' 替换为您的 DLL 的名称.

                  Replace 'dllname' with the name of your DLL.

                  要调用 DLL 函数,首先应该有一个带有与回调类型匹配的签名的 Delphi 函数.例如:

                  To call the DLL function, you should first have a Delphi function with a signature that matches the callback type. For example:

                  function Callback(object_type, object_instnace, property_identifier, device_identifier: UInt; value: PSingle): Boolean cdecl;
                  begin
                    Result := False;
                  end;
                  

                  然后您可以调用 DLL 函数并传递回调,就像您处理任何其他变量一样:

                  Then you can call the DLL function and pass the callback just as you would any other variable:

                  RegisterCallbackGetProperty(Callback);
                  

                  这篇关于从 C++ DLL 调用 Delphi 中的回调函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  What is inside .lib file of Static library, Statically linked dynamic library and dynamically linked dynamic library?(静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么?)
                  How do I load a C DLL from the SXS in Python?(如何从 Python 中的 SXS 加载 C DLL?)
                  Can Cython code be compiled to a dll so C++ application can call it?(Cython 代码可以编译成 dll 以便 C++ 应用程序可以调用它吗?)
                  Delay Loading DLLs(延迟加载 DLL)
                  Throwing C++ exceptions across DLL boundaries(跨 DLL 边界抛出 C++ 异常)
                  Loading a dll from a dll?(从 dll 加载 dll?)

                  1. <i id='6issB'><tr id='6issB'><dt id='6issB'><q id='6issB'><span id='6issB'><b id='6issB'><form id='6issB'><ins id='6issB'></ins><ul id='6issB'></ul><sub id='6issB'></sub></form><legend id='6issB'></legend><bdo id='6issB'><pre id='6issB'><center id='6issB'></center></pre></bdo></b><th id='6issB'></th></span></q></dt></tr></i><div id='6issB'><tfoot id='6issB'></tfoot><dl id='6issB'><fieldset id='6issB'></fieldset></dl></div>

                      <bdo id='6issB'></bdo><ul id='6issB'></ul>
                      <tfoot id='6issB'></tfoot>
                        <tbody id='6issB'></tbody>

                        <legend id='6issB'><style id='6issB'><dir id='6issB'><q id='6issB'></q></dir></style></legend>

                            <small id='6issB'></small><noframes id='6issB'>