错误:致命错误C1190:托管目标代码是否需要'/clr'选项? [英] Error: fatal error C1190: managed targeted code requires a '/clr' option?
本文介绍了错误:致命错误C1190:托管目标代码是否需要'/clr'选项?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我创建了一个dll文件来调用其中的函数,它包含一个CreateLink()函数,该函数用于为exe创建快捷方式文件.这是文章的链接:创建和解决shell链接 [ ^ ],这是一个类,想要将其转换为Win32API,我做了如下操作:
#include " stdafx.h"
#using< mscorlib.dll>
#include < Shlobj.h >
#include < crtdbg.h >
#include < atldef.h >
#include < atlconv.h >
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lp保留
)
{
开关(ul_reason_for_call)
{
案例 DLL_PROCESS_ATTACH:
大小写 DLL_THREAD_ATTACH:
大小写 DLL_THREAD_DETACH:
案例 DLL_PROCESS_DETACH:
break ;
}
返回 TRUE;
}
HRESULT _CreateLink(LPCWSTR FilePath,LPCWSTR LnkPath,LPCWSTR LnkDesc,LPCWSTR WorkDir)
{
USES_CONVERSION;
CoInitialize(NULL);
IShellLink * psl;
HRESULT hres = CoCreateInstance(CLSID_ShellLink,NULL,
CLSCTX_INPROC_SERVER,IID_IShellLink,(LPVOID *)& psl);
如果(SUCCEEDED(hres))
{
IPersistFile * ppf;
psl-> SetPath(W2A(FilePath));
psl-> SetWorkingDirectory(W2A(WorkDir));
psl-> SetDescription(W2A(LnkDesc));
hres = psl-> QueryInterface(IID_IPersistFile,(LPVOID *)& ppf);
如果(SUCCEEDED(hres))
{
hres = ppf-> Save(LnkPath,TRUE);
ppf-> Release();
}
psl-> Release();
}
CoUninitialize();
返回小时;
}
布尔 _stdcall CreateLink(LPCWSTR FilePath,LPCWSTR LnkPath,LPCWSTR LnkDesc,LPCWSTR WorkDir)
{
IntPtr strfilepath = Marshal :: StringToCoTaskMemUni(FilePath);
IntPtr strlnkpath = Marshal :: StringToCoTaskMemUni(LnkPath);
IntPtr strlnkdesc = Marshal :: StringToCoTaskMemUni(LnkDesc);
IntPtr strworkdir = Marshal :: StringToCoTaskMemUni(WorkDir);
HRESULT hres = _CreateLink((LPCWSTR)strfilepath.ToPointer(),
(LPCWSTR)strlnkpath.ToPointer(),
(LPCWSTR)strlnkdesc.ToPointer(),
(LPCWSTR)strworkdir.ToPointer());
元帅:: FreeCoTaskMem(strfilepath);
元帅:: FreeCoTaskMem(strlnkpath);
元帅:: FreeCoTaskMem(strlnkdesc);
元帅:: FreeCoTaskMem(strworkdir);
返回(hres == S_OK);
}
当我编译它时,它产生了一个错误(在"#using< mscorlib.dll>"行):
错误1致命错误C1190:托管目标代码需要'/clr'选项c:\ Users \ Peter \ Desktop \ abc \ abc \ dllmain.cpp 3 abc
我搜索了该错误,但无法解决.请帮我.谢谢.
P/s:我使用VS2008进行编码.
解决方案
使用< <; mscorlib.dll >
子句.
I created a dll file to call the functions in it, it contains a CreateLink() function which is used to create shortcut file for exe. This is link of article: Creating and Resolving shell links[^], that is a class, i want to convert it to Win32API, i did as follows:
#include "stdafx.h"
#using <mscorlib.dll>
#include <Shlobj.h>
#include <crtdbg.h>
#include <atldef.h>
#include <atlconv.h>
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
HRESULT _CreateLink(LPCWSTR FilePath, LPCWSTR LnkPath, LPCWSTR LnkDesc,LPCWSTR WorkDir)
{
USES_CONVERSION;
CoInitialize(NULL);
IShellLink* psl;
HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL,
CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID *) &psl);
if (SUCCEEDED(hres))
{
IPersistFile* ppf;
psl->SetPath(W2A(FilePath));
psl->SetWorkingDirectory(W2A(WorkDir));
psl->SetDescription(W2A(LnkDesc));
hres = psl->QueryInterface(IID_IPersistFile,(LPVOID*)&ppf);
if (SUCCEEDED(hres))
{
hres = ppf->Save(LnkPath, TRUE);
ppf->Release();
}
psl->Release();
}
CoUninitialize();
return hres;
}
bool _stdcall CreateLink(LPCWSTR FilePath, LPCWSTR LnkPath, LPCWSTR LnkDesc,LPCWSTR WorkDir)
{
IntPtr strfilepath = Marshal::StringToCoTaskMemUni(FilePath);
IntPtr strlnkpath = Marshal::StringToCoTaskMemUni(LnkPath);
IntPtr strlnkdesc = Marshal::StringToCoTaskMemUni(LnkDesc);
IntPtr strworkdir = Marshal::StringToCoTaskMemUni(WorkDir);
HRESULT hres = _CreateLink((LPCWSTR)strfilepath.ToPointer(),
(LPCWSTR)strlnkpath.ToPointer(),
(LPCWSTR)strlnkdesc.ToPointer(),
(LPCWSTR)strworkdir.ToPointer());
Marshal::FreeCoTaskMem(strfilepath);
Marshal::FreeCoTaskMem(strlnkpath);
Marshal::FreeCoTaskMem(strlnkdesc);
Marshal::FreeCoTaskMem(strworkdir);
return (hres==S_OK);
}
When i compiled it, it generated an error (at line "#using <mscorlib.dll>"):
Error 1 fatal error C1190: managed targeted code requires a '/clr' option c:\Users\Peter\Desktop\abc\abc\dllmain.cpp 3 abc
I searched that error, but I couldnt solve it. Please help me. Thanks.
P/s: I use VS2008 to code.
解决方案
Remove the#using <mscorlib.dll>
clause.
这篇关于错误:致命错误C1190:托管目标代码是否需要'/clr'选项?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文