Visual studio 如何处理:应用程序无法从我的dll中看到func

Visual studio 如何处理:应用程序无法从我的dll中看到func,visual-studio,assembly,dll,masm,dllimport,Visual Studio,Assembly,Dll,Masm,Dllimport,创建了一个dll和一个应用程序来测试dll中的进程 程序计算字符的重复次数 代码: 动态链接库: 如果我有更好的编码方法,也请告诉我。在互联网上很难找到需要的信息。多谢各位 测试应用程序: .586 .model flat, stdcall option casemap: none include C:\masm32\include\windows.inc include C:\masm32\include\user32.inc include C:\masm32\include\msv

创建了一个dll和一个应用程序来测试dll中的进程

程序计算字符的重复次数

代码:

动态链接库:

如果我有更好的编码方法,也请告诉我。在互联网上很难找到需要的信息。多谢各位

测试应用程序:

.586
.model flat, stdcall
option casemap: none 

include C:\masm32\include\windows.inc 
include C:\masm32\include\user32.inc 
include C:\masm32\include\msvcrt.inc

includelib C:\masm32\lib\msvcrt.lib
includelib C:\masm32\lib\user32.lib 

LoadLibraryA proto LibName:DWORD
GetProcAddress proto hLib:DWORD, FunctionName:DWORD
FreeLibrary proto hLib:DWORD
ExitProcess proto uExitCode:DWORD

.data
LibName db 'Labor07.dll', 0
FunctionName db '_symbol_count@0', 0
DllNotFound db 'cannot find the dll', 0
AppName db 'Load explicit dll', 0
NotFound db 'Func is not found', 0
msg db 'Hello', 0
hLib dd ?
symbol_count_addr dd ?

.code
start:
    
    invoke LoadLibraryA, addr LibName
    .if eax == NULL
        invoke MessageBoxA, NULL, addr DllNotFound, addr AppName, MB_OK
    .else
        mov hLib, eax
        invoke GetProcAddress, hLib, addr FunctionName 
        .if eax == NULL
            invoke MessageBoxA, NULL, addr NotFound, addr AppName, MB_OK
        .else
            push offset msg 
            mov symbol_count_addr, eax 
            call [symbol_count_addr] 
        .endif
        invoke FreeLibrary, hLib 
    .endif 
    invoke ExitProcess, NULL 
end start
结果是MessageBox:

更新#1

结果:

%path%>Project4
Enter string: asfasf
Enter symbol: Count = 1
%path%>
更新#2

%path%>project4
Enter string: asfasfasf
a
Enter symbol: Count = 4
%path%>

labor07.dll
使用STDCALL(
.model flat,STDCALL
)。因此,函数的名称将被修饰:
\u symbol_count@0

改变

FunctionName db 'symbol_count', 0
symbol_count PROC

此外,必须导出函数
symbol\u count

改变

FunctionName db 'symbol_count', 0
symbol_count PROC


谢谢,我想程序会从现在开始看到程序。但由于某种原因,在启动程序后,它只是以代码0关闭。也许你知道为什么?我做错了什么?是程序错误,还是应用程序…@VolodimirPavlenko。除了众所周知的scanf问题外,该程序在这里工作;-)还有错误的计数。你的问题有很多原因。您是否已将子系统设置为CONSOLE?如果你问一个新问题,请发布整个命令行(ml.exe和link.exe)。是的,我使用windows子系统是错误的。我使用VisualStudio编译并链接了它,这就是为什么我不能发布命令行。我能问一下我的scanf有什么问题吗?上传的结果。@VolodimirPavlenko:
scanf
是邪恶的。第一个
ENTER
在流中保持为
LF
(换行=新行),并导致第二个
scanf
立即中止。插入空格以清除空白(空格、制表符、新行):
str\u修饰符db“%s”,0
。取下
mov ecx,eax
进行正确计数。谢谢。现在它工作了,但是第二次打印感觉非常糟糕。你知道发生了什么事吗?上传新代码并更新#2-新结果。
symbol_count PROC EXPORT