我看到有动态链接库可以这样调用
m_hwnd = form_load("c:\bb.xml"); //返回一个句柄
form_setparam(m_hwnd,"value","1"); //设置参数
release(m_hwnd);  //释放即外部程序调用的时候可以根据句柄设置参数值,而我的dll各个函数好像是独立的,请教高手这样的动态链接库应该怎么实现,

解决方案 »

  1.   

    dll本来就允许你返回一个句柄(可能是创建的窗口等等),你也完全可以把这个句柄作为参数再传递给另一个函数,有什么奇怪吗?不懂这种实现有什么难度。
      

  2.   

    dll导出init和fini函数。
    init负责初始化,返回一个“句柄”,其它的接口函数都得使用此句柄来操作。做一个例子
    //myclass.h
    class MyClass
    {
    ....
    };//MyDll.h
    #define MY_HANDLE long
    ....
    MYDLL_API MY_HANDLE init();//MyDll.cpp
    #include "MyDll.h"
    #include "myclass.h"MY_HANDLE init()
    {
      MyClass *pMyClass = new MyClass;
      return (MY_HANDLE)pMyClass;
    }
      

  3.   

    你这个DLL应该更好做。用向导生成一个DLL工程,模仿里面的例子。
      

  4.   

    用的时候DLL的函数和本程序的函数没什么区别,所有定义的变量、函数都在同一个进程里。
      

  5.   

    感谢ouyh12345 的代码,不过我还是不太明白,比如调用时long m_hwnd1,m_hwnd2
    m_hwnd1   =   form_loadstr( "1str");   //返回一个句柄 
    form_addstr(m_hwnd1,"addstr");
    m_hwnd2   =   form_loadstr( "2str");   //返回一个句柄 
    form_addstr(m_hwnd2,"addstr");form_getstr(m_hwnd1)  //得到"1straddstr"
    form_getstr(m_hwnd2)  //得到"2straddstr"form_release(m_hwnd1);
    form_release(m_hwnd2);
    这样的dll怎么写
      

  6.   

    定义一个结构体,表示他们之间的关系就行了
    就是实现一个链表,和是不是DLL没什么关系
    如:struct TEST
    {
      long lIndex;                //序号
      char *pStr;                 //要操作的字符串
      TEST *next;                 //下一个节点
    };TEST *g_pFirst = NULL;        //链表的开头long form_loadstr(char *pSrc)
    {
       TEST *pTemp = new TEST;
       
       ...往链表里添加节点   return pTemp->lIndex;
    }void form_addstr(long lIndex, char *pSrc)
    {
       ...在链表里查找序号等于lIndex的节点,更新字符串值
    }char* form_getstr(long lIndex)
    {
       ...在链表里查找序号等于lIndex的节点,返回字符串指针
    }void form_release(long lIndex)
    {
       ...从链表里删除序号等于lIndex的节点
    }
      

  7.   

    http://blog.hc360.com/portal/personShowArticle.do?articleId=64284
    http://blog.hc360.com/portal/personShowArticle.do?articleId=64285
    http://blog.hc360.com/portal/personShowArticle.do?articleId=64283
      

  8.   

    void fini(MY_HANDLE handle)
    {
      if (handle == 0)
        return;    MyClass   *pMyClass   =   (MyClass *)handle;
        handle->Fini();
    }