zoukankan      html  css  js  c++  java
  • VC 编写 stdcall 方式的DLL

    VC工具:VS2005

    DELPHI 工具: DELPHI 7

     VS2005 新建DLL

    新建-项目 保存时选择 DLL

    代码

    // testdll.cpp : 定义 DLL 应用程序的入口点。
    //

    #include "stdafx.h"

      

    #ifdef _MANAGED
    #pragma managed(push, off)
    #endif

    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
          )
    {
        return TRUE;
    }


     HRESULT __stdcall  TestAdd(int i, int j)
    {
     return i + j;
    }

    #ifdef _MANAGED
    #pragma managed(pop)
    #endif

    代码很简单,就一个 TestAdd

    注意 不能使用VC的 extern"C" __declspec( dllexport ) HRESULT __stdcall  TestAdd(int i, int j)

    下一步,新建一个def文件(使用记事本新建,保存为def),VC默认为MFC的DLL带DEF的,其他的不带。

    DEF代码:

    LIBRARY      "testdll" 

    EXPORTS
        TestAdd   @1

    然后将def加入VS2005,VC6工程中,只要有DEF文件并将其添加到工程中,VC6就可以自动地生成DLL与其相应的Lib文件了。

    但是VS2005不一样,需要指定DEF文件

    工程 > 属性中的链接器,然后找到"输入"这一项. 在 "模块定义文件" 中输入 testdll.def.

    然后编译

    DELPHI 调用

     TestAddFun = function (I: Integer; j: Integer): HRESULT; stdcall;

    var
      TestFun: TestAddFun;

      H: HMODULE;
    begin

      H := LoadLibrary('testdll.dll');
      if H <> 0 then
        TestFun := GetProcAddress(H, 'TestAdd');

      if Assigned(@TestFun) then
        ShowMessage(IntToStr(TestFun(1, 20)));

      FreeLibrary(H);

    至此,调用成功

  • 相关阅读:
    VMWare Server 2.0 安装虚机机网卡驱动找不到
    OutLook The profile name you entered already exists.Enter a different profile name.
    GreyBox基本应用
    Java HashMap工作原理及实现
    C# winform 自定义皮肤制作
    C# Winform 右下角弹出框
    C# winform 最小化到电脑右下角
    C# Winform 的简易聊天程序
    C# winform QQ表情弹出框的制作
    C# 网络编程 TCP编程
  • 原文地址:https://www.cnblogs.com/chengxin1982/p/1640052.html
Copyright © 2011-2022 走看看