在VB中调用是好的。在VB中的函数说明是
Post_ext(Byval title as String, Byval url as String, response as String);
DLL要向response中写字符串,response长度要足够长。在VC中用动态连接方式调用。typedef (*MYPROC)(LPCSTR, LPCSTR, LPSTR);
char *buffer;void foo()
{
  MYPROC proc;
  // LoadLibrary, GetProcAddress
  buffer = calloc(4096000);
  proc("title", "http://123/abc.jsp", buffer);  
}
为什么proc("title", "http://123/abc.jsp", buffer);  这一句会抛出异常访问异常。怎们解决啊??

解决方案 »

  1.   

    估计buffer没有分配成功,
    搂主的习惯可不是很好,申请内存一定要检查是否成功。
    一次申请近4M内存很有问题,而且http://123/abc.jsp这个页面如果不是传给你一个什么zip文件、word文件以及视频音频文件,只是普通的HTML页面的话,绝对用不上1M的内存,800K以上的HTML页面就很少见了。
      

  2.   

    在delphi中的dll第三个变量你是怎么声明的?是否是string类型?是的话可能比较麻烦!
    不过要是楼住的代码贴得没问题的话,我想应该是函数的调用方式出了问题,你没有指定函数的调用方式,在函数压参的时候出错了!
      

  3.   

    问题我自己解决了,但感谢大家的参与,我把分给大家。其实有两个问题。
    1、函数调用规则不同。PASCAL是由被调函数自己清堆栈,C/C++是调用者清堆栈,所以DLL的函数说明要指定调用规则是cdecl,而不是stdcall。2、在C中没有和Delphi的String类型对应的类型,所以把String类型该为pchar。第四个参数要改为pchar*,在DLL中分配返回的内存,存放response,由调用者释放内存。写了这么多,希望对大家有用。如果你有更好的解决方案,请不吝赐教。