一个VB 6.0程序
在程序里面使用的是srd_45d041,因为最早就只有这种类型的ICK,
原来的源代码没有了,在我这有的就是一个编译好的EXE文件,和API的DLL以及BAS,
现在因为多了一种ICK,srd_45db161,所以读卡函数变化了,
但是原来的程序没有判断ICK类型,用的还是原来的函数,所以就不能读出数据
我现在想把程序弄成可以读新的类型的卡,应该怎么弄?
Declare Function srd_45d041 Lib "genfunction.dll" (ByVal icdev As Long, ByVal page As Integer, ByVal offset As Integer, ByVal length As Long, ByVal data_buffer$) As IntegerDeclare Function srd_45db161 Lib "genfunction.dll" (ByVal icdev As Long, ByVal page As Integer, ByVal offset As Integer, ByVal length As Long, ByVal data_buffer$) As Integer
   

解决方案 »

  1.   

    这两个函数没有区别呀?你用旧的 DLL, 把 45db161 当作 45db41 不行吗?
      

  2.   

    原来程序里面写死了是 srd_45d041,只能读这种型号的.
    现在45db161 型号的只能用srd_45db161,各种型号有自己的读写函数,其他函数不能读写出来
      

  3.   

    虽然你可以冒着生命危险直接在编译文件中寻找srd_45d041字符串并替换掉它,但除非你有十足的把握不会出现宇宙毁灭,绝对不要动这个念头。正常点的稳妥做法可以这样:你自己再用VC什么的写个genfunction.dll用作代理,并在这个代理dll中写个函数 srd_45d041,将所有调用传递给新的srd_45db161函数。不过不要忘了还要在这个代理genfunction.dll中写一遍真正genfunction.dll中所包含的所有函数。类似这样这样的思路short srd_45d041 ( int icdev , short page, short offset, int length, char* data_buffer){
      return srd_45db161(icdev, page, offset, length, data_buffer);
    }short srd_45db161( int icdev , short page, short offset, int length, char* data_buffer){
      return real_srd_45db161(icdev, page, offset, length, data_buffer);
    }
      

  4.   

    用PE工具修改dll 的导出表,可以将新的导出函数改成老的名字,也可以增加导出表项把老名称加进去,然后指向同样的地址就可以了,这样比较容易,不用修改源程序