在Visual Studio 2015中创建DLL库

时间:2015-10-23 09:36:27

标签: c++ dll visual-studio-2015

看起来这个例子不会变得更简单:

   __declspec(dllimport) void HelloWorld()
    {
    }  

那么,我遇到了什么问题?好的,当试图按原样编译时,就是在VS中创建dll类型项目之后,我收到警告:
警告C4273:'HelloWorld':dll链接不一致
如果我将cpp文件中HelloWorld的定义更改为:

__declspec(dllexport) void HelloWorld()
{

}  

我收到错误:

错误C2491'HelloWorld':不允许定义dllimport功能
另一方面,如果我将HelloWorld的定义更改为:

AsyncConfigurer

我收到警告:

警告C4273'HelloWorld':dll链接不一致
知道如何定义它所以它编译没有任何警告?我的意思是,这些警告至少令人担忧。

1 个答案:

答案 0 :(得分:1)

在包含标题之前,您需要定义package main import ( // Standard library packages "fmt" "strconv" "log" "net" "net/http" // Third party packages "github.com/julienschmidt/httprouter" "github.com/skratchdot/open-golang/open" ) // https://blog.golang.org/context/userip/userip.go func getIP(w http.ResponseWriter, req *http.Request, _ httprouter.Params){ fmt.Fprintf(w, "<h1>static file server</h1><p><a href='./static'>folder</p></a>") ip, port, err := net.SplitHostPort(req.RemoteAddr) if err != nil { //return nil, fmt.Errorf("userip: %q is not IP:port", req.RemoteAddr) fmt.Fprintf(w, "userip: %q is not IP:port", req.RemoteAddr) } userIP := net.ParseIP(ip) if userIP == nil { //return nil, fmt.Errorf("userip: %q is not IP:port", req.RemoteAddr) fmt.Fprintf(w, "userip: %q is not IP:port", req.RemoteAddr) return } // This will only be defined when site is accessed via non-anonymous proxy // and takes precedence over RemoteAddr // Header.Get is case-insensitive forward := req.Header.Get("X-Forwarded-For") fmt.Fprintf(w, "<p>IP: %s</p>", ip) fmt.Fprintf(w, "<p>Port: %s</p>", port) fmt.Fprintf(w, "<p>Forwarded for: %s</p>", forward) } func main() { myport := strconv.Itoa(10002); // Instantiate a new router r := httprouter.New() r.GET("/ip", getIP) // Add a handler on /test r.GET("/test", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { // Simply write some test data for now fmt.Fprint(w, "Welcome!\n") }) l, err := net.Listen("tcp", "localhost:" + myport) if err != nil { log.Fatal(err) } // The browser can connect now because the listening socket is open. //err = open.Start("http://localhost:"+ myport + "/test") err = open.Start("http://localhost:"+ myport + "/ip") if err != nil { log.Println(err) } // Start the blocking server loop. log.Fatal(http.Serve(l, r)) } 。这样,标题可以根据您是导入还是导出来声明正确的原型。

如果不这样做,它将导入不是你想要的东西