错误:致命错误C1190:托管目标代码是否需要'/clr'选项? [英] Error: fatal error C1190: managed targeted code requires a '/clr' option?

查看:539
本文介绍了错误:致命错误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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆