请问谁有vc调用vb dll的经验啊,本人现有一个用vb写好的功能,想把它写成dll,以供vc调用,不想用vc重写了,那样太麻烦,我用过别人介绍的通过手工link方法输出函数的方法来生成dll,在vc里用loadlibiary也成功了,但在具体调用其中某个函数的时候就系统崩溃了啊,系统提示0XC0000005错误。先将vc代码帖在下面:
HINSTANCE hInstance,hOldInstance;
typedef  BSTR (WINAPI _ADDECE)(long,long,BOOL,long,BOOL,BOOL,BSTR);
_ADDECE * addece = NULL;
void CVcusevbdll_testDlg::OnButton1() 
{
CString strDllName = "pngshow.dll";
hInstance =  GetModuleHandle(strDllName);
CString str="D:\\Study\\vcusevbdll_test\\test.png";
BSTR strMsg;
BSTR strresult;
strMsg = str.AllocSysString();

if(hInstance==NULL)
   {
       hInstance = LoadLibrary(strDllName);
   }
if(hInstance != NULL)
   {
       addece = (_ADDECE*)GetProcAddress(hInstance,"mathadd");
   }
if(addece != NULL )
{
       strresult = addece((long)this->m_hWnd,100,1,100,1,1,strMsg);//该语句出错
       CString strtemp = (char*)_bstr_t(strresult);
}
if(hInstance!=NULL)
   FreeLibrary(hInstance);
}vb的输出函数如下(class1.cls):
Option Explicit
Dim pngClass As New LoadPNG'LoadPNG是一类模块,其中封装了对png图片的读取与显示
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Public Function mathadd(ByVal wHwnd As Long, ByVal x As Long, ByVal BackTure As Boolean, ByVal y As Long, ByVal Alpha As Boolean, ByVal Trans As Boolean, ByVal PngFileName As String) As String
   Dim srchdc As Long
   'MsgBox PngFileName 'vc程序会崩溃
   'If PngFileName <> "" Then 'vc程序会崩溃    'Call GetDC(wHwnd) 'vc程序会崩溃
   '    pngClass.PicBox = srchdc 'Form1.hdc 'or Picturebox 'vc程序会崩溃
   '   pngClass.SetToBkgrnd BackTure, x, y   'vc程序会崩溃
  '     pngClass.BackgroundPicture = wHwnd 'vc程序会崩溃
   '   pngClass.SetAlpha = Alpha 'vc程序会崩溃
    '  pngClass.SetTrans = Trans 'vc程序会崩溃
   '   pngClass.OpenPNG PngFileName 'vc程序会崩溃
   '   DeleteDC srchdc
   '   ShowPngPicture = 1
   'End If
   mathadd = PngFileName '就只这一句则正常
End Function经过测试发现,在这个输出函数里只用调用任何方法(比如系统API函数和vb自己的函数如msgbox等),vc里就回出现前面讲到的错误。都不掉用,直接返回的话,vc里面就能够正确收到返回值且不出错,一调用其它函数vc程序就会崩溃。不知道怎么回事啊,我也不想重新用vc来重写这个dll了,这个vb程序其实是别人写的一个关于如何显示png图片的代码,我稍微改了一下,想做成通用库以供其他语言调用。哪位高人知道的说说啊!
我的系统平台是windowsxp sp2,vc6.0,vb6.0