vc中输出函数:
int fnTdll2(void)
{
LPTSTR s;
strcpy(s,"dddddddddddddddd");
return 42;
}
vb中调用:
Private Declare Function fnTdll2 Lib "D:\mycode\vcpp\tdll2\Debug\tdll2.dll" () As LongPrivate Sub Form_Load()
Call fnTdll2
End Sub
一调用就vb崩溃,我是菜鸟,希望高手指教。。谢谢

解决方案 »

  1.   

    akirya,给个具体代码好吗?c++的字符串传递我最糊涂了。谢谢
      

  2.   

    LPTSTR s; 
    strcpy(s,"dddddddddddddddd"); 
    ===========================
    不崩才怪呢,LPTSTR是一个指针,都没有分配空间给它.
      

  3.   

    一般写法:
    LPTSTR s;
    s=(char *)malloc(....);
    ......
      

  4.   

    LPTSTR s = _strdup("dddddddddddddddd");  
      

  5.   

    应该这么写
    LPTSTR s = StrDup(_T("dddddddddddddddd")); 
      

  6.   

    谢谢。
    还有,想请问,使用new或者malloc的局部变量不delete会不会造成内存泄漏?
    vc++ dll和vb之间传递二维数组该怎么写?
      

  7.   

    得想办法释放内存才行,不然就泄漏了。建议内存由调用者自己分配,然后参数引用传进DLL。
      

  8.   

    LPTSTR   A 32-bit pointer to a character string that is portable for Unicode and DBCS.
      

  9.   

    问题1:上面的都回答了。
    问题2:VB使用的数组都是SafeArray,无论多少维,所以VC里必须使用SafeArray。如果要在VC和VB之间传递,最好用VARIANT来包含SafeArray,方便释放。
      

  10.   

    vb传递数组给c dll使用safearray能不能给各例子,谢谢~
      

  11.   

    long fnTdll3(VARIANT* arr) 

      if (V_VT(arr) == VT_ARRAY)
      {
        SAFEARRAY* psa = V_ARRAY(arr);
        ......
      }