我用VC编了个DLL。要用VB调用,其中参数是传递字符串,大家看看为什么总是提示找不到dll啊
VC代码:
#include "stdafx.h"
#include "CreatePGP.h"#include "TxtFile.h"DLLIMPEXP_PGP BSTR __stdcall Createfile(LPCTSTR strFileName, LPCTSTR strContent)
{
CTxtFile f(strFileName);
f.OpenFileForWrite();
int nLen = strlen(strContent);
CString strLine;
for(int i = 0; i < nLen; i++)
{
strLine.AppendFormat(_T("0x%02X,"), (UINT8)strContent[i]);
if(strLine.GetLength() > 39 || i == nLen-1)
{
f.WriteString(strLine);
f.WriteString(_T("\n")); strLine = _T("");
}
}
f.CloseFile(); CString str;
str.Format(_T("VB input = %s"), strContent);
return SysAllocString((BSTR)(LPCTSTR)str);
}
Private Declare Function CreateFile Lib "d:\VB-VC\PGP.dll" (ByVal p As String, ByVal p As String) As StringDim s As String    s = "d:\VB-VC\aa.txt"
    Dim k As String
    Dim result As String
    result = CreateIni(s, k)
    Debug.Print result提示总是找不到"d:\VB-VC\PGP.dll" 。DLL文件在目录下,这个是什么原因,大家帮忙看看,谢谢啊

解决方案 »

  1.   

    Private Declare Function CreateFile Lib "PGP.dll" (ByVal p As String, ByVal p As String) As String
      

  2.   

    这个貌似不行吧,没有路径啊。我用这个也试过啦,也不行,提示是相同的
    Private Declare Function CreateFile Lib ".\PGP.dll" (ByVal p As String, ByVal p As String) As String
      

  3.   


    把 DLL 就放在工程目录下。然后双击工程文件打开 VB(否则当前路径是 VB 安装路径)。
    在用 CommondDialog 等改变路径查找文件之后,记得 ChDir App.Path。
      

  4.   

    lz这个PGP.dll肯定需要另一个dll辅助,vb提示找不到是这个辅助的dll找不到。
    先查清需要哪些辅助dll,然后拷到一个目录下。
      

  5.   

    声明用
    Private Declare Function CreateFile Lib "PGP.dll" (ByVal p As String, ByVal p As String) As String开发时如果dll放在工程目录下,独立dll的话开始没问题,但用CommondDialog等改变目录后,就不行了
    如果不是独立dll,放工程目录下是加载不了的我的解决方法是把所有相关dll放在vb6.exe所在目录下就可以了(如C:\Program Files\Microsoft Visual Studio\VB98)
    发布时,dll放在工程exe同一目录
      

  6.   

    谢谢提示,我现在把需要的DLL都找到啦。但提示是找不到DLL入口,这是什么原因啊?
      

  7.   

    找不同入口就是找不到你条用的函数,一般是函数名写错,包括大小写:Private Declare Function Createfile Lib "d:\VB-VC\PGP.dll" (ByVal p As String, ByVal p As String) As String
      

  8.   

    应该是DLL导出的函数名被VC编译器加了前后缀。用DumpBin查一下,很可能被改成了_CreateFile@8解决方法,给你的VC DLL 项目加入一.DEF文件,输入以下内容:EXPORTS
       CreateFile
    这是一个典型的问题,在《Windows核心编程》一书的DLL一章有详细讲解。我也是刚解决了这个问题。
      

  9.   

    需要DEF文件设置导出函数,
    另外最好将dll放在system32,编译器有时是从system32去读dll,生成好了的exe运行的话把dll放到当前目录就行了,另外,vc的函数参数用char* 就行了
      

  10.   

    编译之前DLL需要放到System32目录下;
    要放在VB工程目录中也可以,但这样的话在调用前需要设置当前路径。编译后放在EXE目录下就可以了。
      

  11.   

    如果你是在一个系统里用2010生成DLL。再在另一个系统版本里调用DLL。就会这样。
      

  12.   

    大家,我想顺便问一下,若采用一下声明:
    Private Declare Function CreateFile Lib "PGP.dll" (ByRef p As String) As integer能不能将vc中相应的字符串传到p中呢?若能,如何在vc中定义呢?