在线等待,马上结贴,调用 VC下的 dll 的问题(200分)

  • 主题发起人 主题发起人 xiaolin0522
  • 开始时间 开始时间
X

xiaolin0522

Unregistered / Unconfirmed
GUEST, unregistred user!
vc下的函数原形 int InitApi(const char* pFile);<br>调用时,出现无法定位 InitApi 函数 于 &nbsp;该DLL 上?<br><br>请问 怎么解决? <br>
 
你的函数名字一定要和VC里定义的一样!!!
 
http://www.recital.com/support/pdf_docs/sdk.pdf
 
function initapi(pFIle:pChar):integer;cdecl;/stdcall;
 
呵呵,函数名大小写敏感
 
都是从 vc 的头文件中拷贝过来,还有 其他 原因吗?<br>
 
VC中的名字有时用其它的语言来看是乱码,好像VC有一个什么设置可以使用标准的函数<br>名称。<br>若者用序号调用。
 
function InitApi(const pFile:pointer):integer;cdecl;stdcall;external 'my.dll';<br><br>加上 cdecl 还是一样,呜呜<br><br>有其他原因吗?<br><br><br>
 
调用 语句 如下<br><br>procedure TMainfrm.Button1Click(Sender: TObject);<br>var<br>&nbsp; IRes:integer;<br>&nbsp; sPath:string;<br>begin<br>&nbsp; sPath := getcurrentDir()+'/profile.ini';<br>&nbsp; IRes := InitApi(pchar(sPath));<br>end;<br>
 
请问 用序号 调用 怎么样 用?<br>
 
如果不行,估计他的函数名称分裂了,建议你用VC在做一个中转DLL,重新输出这个函数
 
函数名称分裂 &nbsp;是什么意思? 还有其他办法?<br><br>这个Dll 是给客户 做二次开发的,再加一个,可能影响不好。<br>
 
用<br>function InitApi(const pFile:pointer):integer;stdcall;external 'my.dll' name 'InitApi@2';<br>或者<br>function InitApi(const pFile:pointer):integer;stdcall;external 'my.dll' name '_InitApi@2';<br>试试。
 
加个@2 是什么意思? 用上面 两种方式还是 无法定位 'InitApi@2' 或者'_InitApi@2'<br><br>各位老大,还有其他方式吗?
 
你先用exescope看看他的DLL里这个函数的确实名称是什么!
 
to :张无忌<br>Exports from my.dll<br>&nbsp; 5 exported name(s), 5 export addresse(s). &nbsp;Ordinal base is 1.<br>&nbsp; Sorted by Name:<br>&nbsp; &nbsp; RVA &nbsp; &nbsp; &nbsp;Ord. Hint Name<br>&nbsp; &nbsp; -------- ---- ---- ----<br>&nbsp; &nbsp; 00002180 &nbsp; &nbsp;1 0000 ?Connect@@YAHXZ<br>&nbsp; &nbsp; 00002390 &nbsp; &nbsp;2 0001 ?Disconnect@@YAHXZ<br>&nbsp; &nbsp; 00001F60 &nbsp; &nbsp;3 0002 ?InitApi@@YAHPBD@Z<br>&nbsp; &nbsp; 00002990 &nbsp; &nbsp;4 0003 ?RecvMsg@@YAHPAH00PAD111001I@Z<br>&nbsp; &nbsp; 00002400 &nbsp; &nbsp;5 0004 ?SendMsg@@YAHHHHHHPBD0HHH0000H0H0@Z<br><br><br>用 tdump 的 结果<br><br>而且 用 vc 程序调用这个 dll 都是正常的
 
这应该是VC的stdcall输入,但是没有定义好def文件,所以这样,<br>没办法的,你用VC做个最好做个中间的DLL
 
没有定义好def文件,是什么意思?<br>请解释一下,我跟做dll的人 &nbsp;好有个说法.<br>
 
我用 动态 装入,也找不到 其中的函数<br>
 
让他做个mfc 的DLL,然后在用stdcall,在def文件里 用 <br> DllCanUnloadNow &nbsp; &nbsp; @1 <br> DllGetClassObject &nbsp; @2 <br> DllRegisterServer &nbsp; @3 <br> DllUnregisterServer @4
 
后退
顶部