如题?如何操作?(如何加入资源,如何释放)?谁能给讲讲,有个例子最好。

解决方案 »

  1.   

    真的没有这样干过吗?在vc中选择"file view"选项卡,然后add file to folders...就可以加入.dll文件啊,可关键是这样怎么在需要的时候释放dll?真的没有会吗?
      

  2.   

    LoadLibrary(), FreeLibrary(), MSDN有.
      

  3.   

    checkyvc6(checkyvc6) ,别误会,我可不会写木马,我只是想知道除了隐式调用、显试调用以外.....那些常规写dll和调用dll的方法外,加入工程的方法。
      

  4.   

    很简单的
    1。把DLL当作资源添加到工程中
    2。运行时从资源中释放出来,可以用CreateFile,WriteFile,
    3。LoadLibrary,FreeLibrary
      

  5.   

    谢谢theone的提示:CreateFile比较容易,可是对于WriteFile应该怎么写呢?
    BOOL WriteFile(
      HANDLE hFile,                    
      LPCVOID lpBuffer,                //这个参数怎么写,如何从资源中得到dll的数据呢?
      DWORD nNumberOfBytesToWrite,     
      LPDWORD lpNumberOfBytesWritten,  
      LPOVERLAPPED lpOverlapped        );
      

  6.   

    是将作为资源的dll文件释放出来是不是?
    按下面步骤做
    1.GetModuleHandle -> FindResource -> LoadResource->LockResource获取资源文件地址
    2.SizeofResource 获取资源文件大小
    3.writefile的参数有了然后就读文件写文件罗!
    具体参数查msdn,没什么技术深度的,函数堆砌而已!
      

  7.   

    jruv(江城飞鸿)大侠,非常感谢你,我基本上可以明白你的意思了,也知道该如何做了,可还有一个小问题,就是将dll加入工程后(我不知道怎么加入,我的作法是将mymaths.dll文件加入工程,然后,dll是不是还得作为资源再加入一遍?选择vc中的resource view 选项卡,右键/import,然后加入mymaths.dll,随后系统提示让写入资源类型,因为dll既不是icon也不是bmp,也不是menu等这些常规资源。所以我起名data资源,这样mymaths就加入了,我打开resource.h一看,里面多了一个资源名叫IDR_DLL1,请问是这样加入dll资源吗),下面我使用GetModulHandle函数,可是却出错。
    if(GetModuleHandle("mymaths.dll")==NULL)
       AfxmessageBox("error");
    为什么这样写总是提示error?
      

  8.   

    Import时随便填个类型名,如“DATA”
    LPVOID IoBuffer = (LPVOID)::LoadResource(NULL,
    FindResource(NULL,MAKEINTRESOURCE(IDR_DLL1/*你Resource 的ID*/),(LPCTSTR)"DATA"));
    DWORD dwResource = SizeofResource(NULL,
    FindResource(NULL,MAKEINTRESOURCE(IDR_DLL1/*你Resource 的ID*/),(LPCTSTR)"DATA"));
    WriteFile(m_file,IoBuffer,dwResource,&BytesRead,NULL);
      

  9.   

    theone()大侠,我按你的与法写了,可还是有问题,我把我的代码写下来,请你邦我看一下吧。void CTestDlg::OnButton5() 
    {HANDLE f;
    if( (f=CreateFile( "D:\\maths.dll", 
          GENERIC_READ | GENERIC_WRITE,
          FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
          FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE )
         MessageBox("CREATE IT", "got it", MB_OK );///程序在这里可以成功创建
    else
         MessageBox("NOT create it", "not got it", MB_OK );LPVOID IoBuffer = (LPVOID)::LoadResource(NULL,
    FindResource(NULL,MAKEINTRESOURCE(IDR_DATA1/*你Resource 的ID*/),(LPCTSTR)"DATA"));if(IoBuffer==NULL)
    AfxMessageBox("LoadResource error");//我的程序确实执行到这里,我看了一下错误代码,提示为"指定的映象文件不包含资源区域",因为这里有错,所以下面代码都不会正确执行。DWORD dwResource = SizeofResource(NULL,
    FindResource(NULL,MAKEINTRESOURCE(IDR_DATA1/*你Resource 的ID*/),(LPCTSTR)"DATA"));
    DWORD BytesRead;
    WriteFile(f,IoBuffer,dwResource,&BytesRead,NULL);}
      

  10.   

    确信你的resource ID以及resouce type都正确,确信你现在使用的resource资源就是你DLL所在的资源。