dll中的函数是这样的。函数在vc应用程序中没有问题。只是做成dll在vb中调用1、2、3、出内存不能写错误。
我想在vb中得到一个图片的略缩图。
int THUMBDLL_SaveThumbImage2()
{
    //WCHAR * pcSourceFilename=L"c://Windows2000.jpg";
    Bitmap image(L"c://Windows2000.jpg");//SysAllocString((BSTR)str); 
    MessageBox("ok");        //这个没有问题。
    CLSID pngClsid;
    int r=GetEncoderClsid(L"image/png", &pngClsid);
    image.GetThumbnailImage(60,60,NULL,NULL);                            //1、这个出错
    image.Save(L"c://Mosaic22.png", &pngClsid, NULL);                    //2、这个出错
    Image* pThumbnail = image.GetThumbnailImage(40, 40, NULL, NULL);     //3、这个出错
    pThumbnail->Save(L"c://Mosaic44.png", &pngClsid, NULL);              
    delete pThumbnail;    return THUMBDLL_E_ERROR_NO;
}还有可不可以在vb中直接使用gdi++,这样就不用做dll在vb中调用了。

解决方案 »

  1.   

    http://chs.gotdotnet.com/quickstart/winforms/doc/winformsgdiplus.aspx
      

  2.   

    调用GdiplusStartup初始化Gdi+了吗?
      

  3.   

    wangk(倒之) :你说的非常对。
    但是现在图片生成了,OK1、OK2、OK3都出现,最后出内存能读的错误了。int THUMBDLL_SaveThumbImage2()
    {
    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR gdiplusToken;
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);    //char * pcSourceFilename="c://Windows2000.jpg";
        //Bitmap image(SysAllocString((BSTR)pcSourceFilename));//SysAllocString((BSTR)str); 
        Bitmap image(L"c://Windows2000.jpg");//SysAllocString((BSTR)str); 
        CLSID pngClsid;
        int r=GetEncoderClsid(L"image/png", &pngClsid);
        image.GetThumbnailImage(60,60,NULL,NULL);
        image.Save(L"c://Mosaic22.png", &pngClsid, NULL);
        Image* pThumbnail = image.GetThumbnailImage(40, 40, NULL, NULL);
        pThumbnail->Save(L"c://Mosaic44.png", &pngClsid, NULL);
    MessageBox(NULL,"OK1",NULL,NULL);
        delete pThumbnail;
    MessageBox(NULL,"OK2",NULL,NULL);
        GdiplusShutdown(gdiplusToken);
        MessageBox(NULL,"OK3",NULL,NULL);
        return THUMBDLL_E_ERROR_NO;
    }VB中是这样调用的。
    Option Explicit
    Private Declare Function THUMBDLL_SaveThumbImage2 Lib "MakeThumbnailDll.dll" () As LongPrivate Sub Command1_Click()
        Dim a As Long
        a = THUMBDLL_SaveThumbImage2()
    End Sub