急求问VB调用VC的DLL传递字符串的有关问题

急,求问VB调用VC的DLL传递字符串的问题?
我用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 String

Dim 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文件在目录下,这个是什么原因,大家帮忙看看,谢谢啊


------解决方案--------------------
注册了吗?引用了吗?
------解决方案--------------------
探讨
Private Declare Function CreateFile Lib "PGP.dll" (ByVal p As String, ByVal p As String) As String

------解决方案--------------------
lz这个PGP.dll肯定需要另一个dll辅助,vb提示找不到是这个辅助的dll找不到。
先查清需要哪些辅助dll,然后拷到一个目录下。
------解决方案--------------------
声明用
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同一目录


------解决方案--------------------
找不同入口就是找不到你条用的函数,一般是函数名写错,包括大小写:

Private Declare Function Createfile Lib "d:\VB-VC\PGP.dll" (ByVal p As String, ByVal p As String) As String
------解决方案--------------------
??理论上不会有很大问题呀?
------解决方案--------------------
应该是DLL导出的函数名被VC编译器加了前后缀。用DumpBin查一下,很可能被改成了_CreateFile@8

解决方法,给你的VC DLL 项目加入一.DEF文件,输入以下内容:

EXPORTS
CreateFile


这是一个典型的问题,在《Windows核心编程》一书的DLL一章有详细讲解。我也是刚解决了这个问题。
------解决方案--------------------
需要DEF文件设置导出函数,
另外最好将dll放在system32,编译器有时是从system32去读dll,生成好了的exe运行的话把dll放到当前目录就行了,

另外,vc的函数参数用char* 就行了
------解决方案--------------------
编译之前DLL需要放到System32目录下;
要放在VB工程目录中也可以,但这样的话在调用前需要设置当前路径。

编译后放在EXE目录下就可以了。