以下代码取自 here.我在Windows 7上工作时删除了所有Windows NT部分.

我复制了这段代码并在visual studio 2010中运行(新项目 – > VC – > CLR-> CLR控制台……).但它提供了许多未解决的外部’c’错误,如代码下方列出的那样.我犯了什么错?

#define STRICT  1 

#include <windows.h>
#include <iostream>
using namespace std;

BOOL CALLBACK EnumWindowsProc(HWND hWnd,LParaM lParam) {
DWORD dwThreadId,dwProcessId;
HINSTANCE hInstance;
char String[255];
HANDLE hProcess;
if (!hWnd)
return TRUE;        // Not a window
if (!::IsWindowVisible(hWnd))
return TRUE;        // Not visible
if (!SendMessage(hWnd,WM_GETTEXT,sizeof(String),(LParaM)String))
return TRUE;        // No window title
hInstance = (HINSTANCE)getwindowlong(hWnd,GWL_HINSTANCE);
dwThreadId = GetwindowThreadProcessId(hWnd,&dwProcessId);
hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId);
cout << hWnd << ' ' << dwProcessId << '\t' << String << '\t';
cout << "(None)\n";
CloseHandle(hProcess);
return TRUE;
}

int main(int argc,char *argv[],char *envp[]) {
EnumWindows(EnumWindowsProc,NULL);
return 0;
}

这给出了以下错误(和其他类似的未解决的extern C错误)

1>wndowfind.obj : error LNK2028: unresolved token (0A000342) "extern "C" int __stdcall       
 EnumWindows(int (__stdcall*)(struct HWND__ *,long),long)"     3
 (?EnumWindows@@$$J18YGHP6GHPAUHWND__@@J@ZJ@Z) referenced in function "int __cdecl 
 main(int,char * * const,char * * const)" (?main@@$$HYAHHQAPAD0@Z)

 1>wndowfind.obj : error LNK2028: unresolved token (0A000346) "extern "C" unsigned long  
 __stdcall GetwindowThreadProcessId(struct HWND__ *,unsigned long *)"    
 (?GetwindowThreadProcessId@@$$J18YGKPAUHWND__@@PAK@Z) referenced in function "int __stdcall 
 EnumWindowsProc(struct HWND__ *,long)" (?EnumWindowsProc@@$$FYGHPAUHWND__@@J@Z)

 1>wndowfind.obj : error LNK2028: unresolved token (0A000347) "extern "C" long __stdcall 
 getwindowlongW(struct HWND__ *,int)" (?getwindowlongW@@$$J18YGJPAUHWND__@@H@Z) referenced in 
 function "int __stdcall EnumWindowsProc(struct HWND__ *,long)" 
 (?EnumWindowsProc@@$$FYGHPAUHWND__@@J@Z)

 1>wndowfind.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall  
 EnumWindows(int (__stdcall*)(struct HWND__ *,long)" 
 (?EnumWindows@@$$J18YGHP6GHPAUHWND__@@J@ZJ@Z) referenced in function "int __cdecl 
 main(int,char * * const)" (?main@@$$HYAHHQAPAD0@Z)

 1>c:\users\afnan\documents\visual studio 2010\Projects\wndowfind\Debug\wndowfind.exe : fatal 
 error LNK1120: 10 unresolved externals
 1>
 1>Build Failed.

更新

通过包含库(如答案中所示),我能够成功运行该程序.但我无法理解为什么只有字符串的第一个字符打印而不是完整字符,如输出中所示:

00010060 2652   S       (None)
002502B2 5820   C       (None)
00090402 5160   w       (None)
00050392 5160   w       (None)
00060292 3520   F       (None)
000C02BA 3520   M       (None)
0001021A 3736   E       (None)
00040018 896    I       (None)
00010170 3580   A       (None)
0002003E 2684   D       (None)
00030316 4956   N       (None)
000202DE 3736   D       (None)
0001031E 2652   S       (None)
000100EA 2652   P       (None)

在上面的输出中,S实际上是“开始”,C是“控制台”等我通过间谍工具确认.
如何打印完整的字符串而不是第一个字符?

默认情况下,CLR项目不包括标准Windows库,例如user32.lib.

编辑项目属性,找到Linker Inputs选项,并添加kernel32.lib user32.lib advapi32.lib,它们是Win32代码所需的常用库.

windows – vs 2010:错误LNK2028:未解析的令牌(0A000342)“extern”C“int __stdcall的更多相关文章

  1. ios – 类中的extern NSString * const.

    嗨,我有这个头文件:执行:当我在.pch文件中导入头文件时,我可以在任何地方访问常量.但我试着了解发生了什么.我从不为此对象分配init,因此它们不能是实例常量.所以常量必须是“类对象常量对吗?但我认为类对象不能包含数据.谁能解释一下?解决方法那些外部变量是app级全局变量.它们没有作用于类,它们不限于类的实例.Objective-C不支持实例或类级别全局变量.如果需要类级别常量,则需要定义类方法

  2. Swift Modules for React Native

    ReactNativeisanObjective-CapplicationframeworkthatbridgesJavaScriptapplicationsrunningintheJscoreJavaScriptenginetoiOSandAndroidnativeAPIs.Intheory,youwriteyourapplicationlogicinJSXandES6/7andtranspil

  3. 从Swift 2.2开始,xcode – extern NSString不可访问

    由于使用Swift2.2对Xcode7.3的更新,我无法从外部Objective-C库访问变量。在我的swift代码中,我只需要调用DEFAULT_URL。从Swift2.2起,我得到以下错误:我可以访问这个框架的类和方法,但是我无法访问externNsstrings。任何想法如何解决这个问题?@patrickS我有一个愚蠢的原因,我的externconst被定义在我的.h文件的@interface内。这似乎已经使这个版本的XCode/Clang的Swift代码私有。它适用于所有externconst不仅

  4. 当将Swift桥接到React-Native时,“不是公认的Objective-C方法”

    我试图将我的React-Native0.33代码链接到一个超级简单的Swift方法,在thisguide之后,但是我得到的只是显示:(Nsstring*)名称不是一个公认的Objective-C方法.这是我的代码:SwitchManager.swiftSwitchManagerBridge.hSwitchManager桥接,Header.h然后在我的index.ios.js文件中,我从“Nativ

  5. iOS开发中关键字const/static/extern、UIKIT_EXTERN的区别和用法

    这篇文章主要介绍了iOS 关键字const/static/extern、UIKIT_EXTERN区别和用法,需要的朋友可以参考下

  6. IOS 关键字const 、static、extern详解

    这篇文章主要介绍了IOS 关键字const 、static、extern详解的相关资料,这里对关键字如何使用,及在IOS开发中的意义做了详解,需要的朋友可以参考下

  7. windows – vs 2010:错误LNK2028:未解析的令牌(0A000342)“extern”C“int __stdcall

    以下代码取自here.我在Windows7上工作时删除了所有WindowsNT部分.我复制了这段代码并在visualstudio2010中运行(新项目–>VC–>CLR->CLR控制台……这给出了以下错误更新通过包含库,我能够成功运行该程序.但我无法理解为什么只有字符串的第一个字符打印而不是完整字符,如输出中所示:在上面的输出中,S实际上是“开始”,C是“控制台”等我通过间谍工具确认.如何打印完整的字符串而不是第一个字符?

  8. 什么时候在Windows中需要“extern C”?

    我们知道我们可以在c中直接使用c函数,那么当extern“C”需要时呢?如果您的函数在.c文件中实现,则.cpp文件将需要extern“C”引用,否则它们将引用一个被破坏的C-style函数名,链接将失败.从DLL中导出函数也很方便,因此它们以非标记名称导出.

  9. codis3 搭建部署实验

    文件句柄设置表示在Linux系统中可以打开的文件数量fs.aio-max-nr=1048576#该参数表示同时可以拥有的的异步IO请求数目#Networknet.ipv4.tcp_syncookies=1#当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭。net.ipv4.tcp_tw_reuse=1#允许将TIME-WAITsockets重新用于新的TCP连接,默认为0,表示关闭net.ipv4.tcp_tw_recycle=1#TCP连接中TIME-WAI

  10. Windows&amp;C:extern&amp;__declspec(dllimport)

    “extern”和“__declspec之间的区别/关系是什么?__declspec表示符号应该从DLL导出。__declspec表示符号将从DLL导入。>你不需要使用__declspec的外部程序,但是由于你通常使用相同的头文件,所以在编译时需要extern该DLL。

随机推荐

  1. static – 在页面之间共享数据的最佳实践

    我想知道在UWP的页面之间发送像’selectedItem’等变量的最佳做法是什么?创建一个每个页面都知道的静态全局变量类是一个好主意吗?

  2. .net – 为Windows窗体控件提供百分比宽度/高度

    WindowsForm开发的新手,但在Web开发方面经验丰富.有没有办法为Windows窗体控件指定百分比宽度/高度,以便在用户调整窗口大小时扩展/缩小?当窗口调整大小时,可以编写代码来改变控件的宽度/高度,但我希望有更好的方法,比如在HTML/CSS中.在那儿?

  3. 使用Windows Azure查询表存储数据

    我需要使用特定帐户吗?>将应用程序部署到Azure服务后,如何查询数据?GoogleAppEngine有一个数据查看器/查询工具,Azure有类似的东西吗?>您可以看到的sqlExpressintance仅在开发结构中,并且一旦您表示没有等效,所以请小心使用它.>您可以尝试使用Linqpad查询表格.看看JamieThomson的thispost.

  4. windows – SetupDiGetClassDevs是否与文档中的设备实例ID一起使用?

    有没有更好的方法可以使用DBT_DEVICEARRIVAL事件中的数据获取设备的更多信息?您似乎必须指定DIGCF_ALLCLASSES标志以查找与给定设备实例ID匹配的所有类,或者指定ClassGuid并使用DIGCF_DEFAULT标志.这对我有用:带输出:

  5. Windows Live ID是OpenID提供商吗?

    不,WindowsLiveID不是OpenID提供商.他们使用专有协议.自从他们的“测试版”期结束以来,他们从未宣布计划继续它.

  6. 如果我在代码中进行了更改,是否需要重新安装Windows服务?

    我写了一个Windows服务并安装它.现在我对代码进行了一些更改并重新构建了解决方案.我还应该重新安装服务吗?不,只需停止它,替换文件,然后重新启动它.

  7. 带有双引号的字符串回显使用Windows批处理输出文件

    我正在尝试使用Windows批处理文件重写配置文件.我循环遍历文件的行并查找我想要用指定的新行替换的行.我有一个’函数’将行写入文件问题是%Text%是一个嵌入双引号的字符串.然后失败了.可能还有其他角色也会导致失败.如何才能使用配置文件中的所有文本?尝试将所有“在文本中替换为^”.^是转义字符,因此“将被视为常规字符你可以尝试以下方法:其他可能导致错误的字符是:

  8. .net – 将控制台应用程序转换为服务?

    我正在寻找不同的优势/劣势,将我们长期使用的控制台应用程序转换为Windows服务.我们为ActiveMQ使用了一个叫做java服务包装器的东西,我相信人们告诉我你可以用它包装任何东西.这并不是说你应该用它包装任何东西;我们遇到了这个问题.控制台应用程序是一个.NET控制台应用程序,默认情况下会将大量信息记录到控制台,尽管这是可配置的.任何推荐?我们应该在VisualStudio中将其重建为服务吗?我使用“-install”/“-uninstall”开关执行此操作.例如,seehere.

  9. windows – 捕获外部程序的STDOUT和STDERR *同时*它正在执行(Ruby)

    哦,我在Windows上:-(实际上,它比我想象的要简单,这看起来很完美:…是的,它适用于Windows!

  10. windows – 当我试图批量打印变量时,为什么我得到“Echo is on”

    我想要执行一个简单的批处理文件脚本:当我在XP中运行时,它给了我预期的输出,但是当我在Vista或Windows7中运行它时,我在尝试打印值时得到“EchoisOn”.以下是程序的输出:摆脱集合表达式中的空格.等号(=)的两侧可以并且应该没有空格BTW:我通常在@echo关闭的情况下启动所有批处理文件,并以@echo结束它们,所以我可以避免将代码与批处理文件的输出混合.它只是使您的批处理文件输出更好,更清洁.

返回
顶部