急:VC6编写DLL里,怎么给函数传递字符串类型的参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急:VC6编写DLL里,怎么给函数传递字符串类型的参数相关的知识,希望对你有一定的参考价值。

小弟正在编写一款 文件和文件夹加密的软件,由于某些原因,准备将实现加密的逻辑代码用DLL的形式集成。也就是说,这个DLL负责着对单个文件或一个文件夹的加密。

可是,碰到了这样的问题,无论我向DLL的导出函数传递CString型的还是LPCTSTR型的参数,总是只接收到了字符串的头一个字符,比如向其传递“abc“,只收到了"a",这样的话,将文件加密以后,用任何一个首个字符为“a”的字符串作为密码,即可以解密。显然达不到要求。

下面是我完整的导出函数的声明:

extern "C" __declspec(outport) __int64 TurnPwd(LPCTSTR lpPwdSet,UINT nFlag);

__declspec(outport)这里,不知道写得对不对,我现在在网吧,不记得写了

而第二个参数lpPwdSet,无论传递什么字符串,也无论是LPCTSTR的还是CString的,都只接收传进来的第一个字符。

求各位高人指导一下,VC6写的DLL,怎么接收传进来的字符串,又怎么在这个函数里还原成字符串进行处理,谢谢!

满意可加分。

参考技术A 和平常写的函数是一样的,只不过在声明函数时前面加上__declspec(export) 参考技术B 原型:
int WINAPI icePub_encryptFile(char *strFilename, char *strOutputFilename, char *strKey)
输入:strFilename 待加密文件名
strOutputFilename 加密后文件名
strKey 密钥,任意长度
输出:
返回码:

Char key[128];
strcpy(key,"11223344");

typedef int (WINAPI ICEPUB_ENCRYPTFILE)(char *strFilename, char *strOutputFilename, char *strKey);
ICEPUB_ENCRYPTFILE *icePub_encryptFile = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)

icePub_encryptFile=(ICEPUB_ENCRYPTFILE *)GetProcAddress(hDLLDrv,"icePub_encryptFile");

if(icePub_encryptFile)
icePub_encryptFile("e:\\a.jpg","e:\\a.dat",key);
if(hDLLDrv)
FreeLibrary(hDLLDrv);

参考资料:http://bbs.icese.net/icepubdll/icePubDLL%bd%d2%c3%d820110624.pdf

将 Array 传递给 XLPagerTabBar 委托函数以打开 VC

【中文标题】将 Array 传递给 XLPagerTabBar 委托函数以打开 VC【英文标题】:Pass Array to the XLPagerTabBar delegate function to open VC 【发布时间】:2018-06-05 07:21:10 【问题描述】:

我正在使用第三方库 XLPagerTabBarStrip。它有委托

override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController]

现在我正在尝试传递包含情节提要标识符名称的数组。我正在运行 for 循环以获取名称,然后将其传递给我的 return 语句。当我运行应用程序时,它只显示数组的最后一项。如何将所有数组项传递给 return 语句?我的代码是这样的,

var child1 = UIViewController()

 override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] 

    let viewController = ["LoggedInVC","RegisterationVC"]

    for items in viewController
        child1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: items)

    
    return [child1]

当我运行应用程序时,它只显示标识符为 RegisterationVC 的 vc。如何同时显示两者?

【问题讨论】:

【参考方案1】:

您的var child1UIViewController 类型,每次执行循环时都会覆盖此变量。

你需要的是一个UIViewController的数组

试试这个:

 override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] 

    var childs = Array<UIViewController>()

    let viewControllers = ["LoggedInVC","RegisterationVC"]

    for item in viewControllers 
        childs.append(UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: item))
    

    return childs

【讨论】:

如果我有动态数组,可以用这种方法吗? @Teetz @raheem 你对动态数组的具体含义是什么? (如果您想提供更多信息,可以编辑您的问题) 不,我只是想问如果我有动态数组,那么这个方法可以写吗? @Teetz 只需根据您想要实现的目标填写您需要的标识符数组。

以上是关于急:VC6编写DLL里,怎么给函数传递字符串类型的参数的主要内容,如果未能解决你的问题,请参考以下文章

用C语言如何写DLL动态链接库?VB.net 又如何调用其生成的DLL库?急急急!!!!在线等!!

delphi将pchar类型的变量传递给vc编写的dll问题,但是返回来的始终是一样的

如何获得dll中的函数、接口和字符串?

血本急求:将对话框放入 DLL 文件当中,在主程序中作为子窗口非模态显示,做完操作后,释放该 DLL 的方法

2015.3.5 VS2005调用VC6 dll 时结构参数的传递

VC6.0编译DLL,使用VS2010调用问题及解决方法