急求问VB调用VC的DLL传递字符串的有关问题
急,求问VB调用VC的DLL传递字符串的问题?我用VC编了个DLL。要用VB调用,其中参数是传递字符串,大家看看为什么
急,求问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目录下就可以了。