内联函数
code.h
#ifndef DLL_API
#define  DLL_API _declspec(dllimport)
#endifclass DLL_API test
{
 inline void t()
{
 //do......
}
}code.cpp#define  DLL_API _declspec(dllexport)
#include "code.h"在code.h定义内联函数编译时有无法找到符号错误!1我写一个DLL。但是在头文件中不能加内联啊?有什么办法?
另外。我要在一个线程中调用一个类的实例方法
所以我定义了一个结构
  typedef struct
{
test*test_obj;//传指针过去
HANDLE completion_port;//完成端口句柄
}WORK_THREAD_PARAM,*LPWORK_THREAD_PARAM;
然后在test类的一个方法中LPWORK_THREAD_PARAM workThreadParam=new WORK_THREAD_PARAM();//这里的内存在线程中如何释放?不能不能new啊。这个方法退出后线程才开始。如果不new刚线程无法得到值。但在线程中不能delete 。因为会让test * test_obj为空。但在线程中那个NEW出来的东西用不着了啊。!
workThreadParam->completion_port=hCompletionPort;
workThreadParam->>test_obj=this;DWORD  WINAPI test::WorkThread(LPVOID lpParameter)
{
LPWORK_THREAD_PARAM workParam=(LPWORK_THREAD_PARAM)lpParameter;
HANDLE hCompletion=workParam->completion_port;
test*test_obj;=workParam->test_obj;
//下边就可以调用了。但如果delete的话刚不行
test_obj->(实例方法)}
问题一:如何在dll项目中定义内联函数
问题二:怎样释放那个new出来的内存啊?

解决方案 »

  1.   

    但在线程中不能delete 。因为会让test * test_obj为空为何? 你自己写了对delete重载的代码? 不然不会调用delete test_obj;的dll没用过 不过好像类里面定义的函数,不加声明,则默认是inline的
      

  2.   

    楼上朋友。我试了。test_obj为 空
      

  3.   

    问题1:参考http://msdn.microsoft.com/zh-cn/library/feffc7b5(VS.80).aspx问题2:使用引用计数(引用计数采用原子操作,如InterlockedIncrement/InterlockedDecrement等处理)
    A线程new data;            //data引用计数为1
    对data增加引用计数           //data引用计数为2
    放到B线程可以取到的存储区    //data引用计数为2
    A线程释放data一个引用计数   //data引用计数为1B线程取得data             //data引用计数为1或者2(如果在A释放之前),其中有一个引用计数是A交给B管理的,所以无论何时至少有一个引用计数
    B线程处理data             //data引用计数为1(假设)
    B线程释放data一个引用计数   //data引用计数为0(假设),回收
      

  4.   

    1、我用VC6和2005都没问题,编译结果是在模块内部使用内联,对外导出函数。
    2、new一个结构传给线程,在线程内delete,这是非常常见的做法,有何不行?
      

  5.   

    我合计csdn的计时系统坏了呢!