小编jon*_*son的帖子

编译时动态链接库不生成.lib文件(Visual Studio C++ Express)

作为学习C++的一部分,我编写了一个引用它的简单类库+应用程序.所有内容都构建,除了类库不生成.lib文件,这导致应用程序抛出"LINK:致命错误LNK1104:无法打开文件".这似乎很合理; 很明显,如果没有必要的文件,则会出现错误,这是致命的.(旁注:我还没有书)

所以,我去寻找可能无法生成.lib文件的原因.顺便说一句,我的搜索功能相当薄弱.我所做的就是,如果库没有任何__declspec(dllexport)标签,它就不会导出.lib.

我现在将发布类库的头文件和.cpp内容(一个简单的"Console"类,带有一个"Write(std :: string)"方法).

标题:

// Extensions.h

#pragma once

#include "stdafx.h"

namespace Extensions {

    __declspec(dllexport) class Console
    {
    public:
        __declspec(dllexport) static void Write(std::string text);
    };
}
Run Code Online (Sandbox Code Playgroud)

我不确定在标记类时是否需要标记函数,但是我可以在它工作时检查它.

和.cpp文件:

// This is the main DLL file.

#include "stdafx.h"

// #include "Console.h"

namespace Extensions {

    void Console::Write(std::string text)
    {
        std::cout << text.c_str();
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经检查过,它被设置为生成一个动态链接库.

谢谢.

c++ visual-studio-2010 .lib

33
推荐指数
1
解决办法
4万
查看次数

如何两次扩展CMD shell变量(递归)

使用Windows XP CMD命令行,我可以将变量扩展两次,如下所示:

set AAA=BBB
set BBB=CCC
for /F "usebackq tokens=*" %i in (`echo %%AAA%%`) do echo %i
Run Code Online (Sandbox Code Playgroud)

会回应CCC.即AAA已经扩大到字符串BBB,然后变量BBB已经扩大到CCC.

这不适用于批处理脚本(即.cmd文件)内部.更改%%AAA%%为任何一个%%%AAA%%%%%%%AAA%%%%不起作用.

知道如何从脚本中实现这一点,即将变量AAA扩展到字符串CCC?

晚编辑

发布的答案适用于我的缩减示例,但非曲折的答案对真实案例不起作用.这是一个扩展示例(不起作用),它说明了我实际上要做的事情:

setlocal enabledelayedexpansion

set LIST=BBB CCC DDD
set BBB=111
set CCC=222
set DDD=333

for %%i in (%LIST%) do (

    for /F  %%a in ('echo %%%i%') do  echo !%%a!

)
Run Code Online (Sandbox Code Playgroud)

我想看看

111
222
333
Run Code Online (Sandbox Code Playgroud)

输出.

windows shell scripting cmd batch-file

12
推荐指数
3
解决办法
1万
查看次数

更加惯用(monadic?)方式来表达这个Scala

我有几个遵循这种模式的代码块:

// Dummy function defs.
def result(i : Int, d : Double, b : Boolean) = {
    if (b) d else i
}

def fA(s : String) = {7}
def fB(s : String, i : Int) = {1.0}
def fC(s : String, i : Int, d : Double) = {true}

// Actual code.
def test(s : String) : Double = {
    try {
        val a = fA(s) 
        try {
            val b = fB(s, a)
            try {
                val c = fC(s, …
Run Code Online (Sandbox Code Playgroud)

monads scala

6
推荐指数
2
解决办法
1749
查看次数

vector::resize 增加了多少容量?

据我所知,C++ 标准没有具体说明当 vector::resize 需要增加时如何增加向量容量。但有没有一个“典型”的实现呢?

具体来说:我不知道我的向量需要有多大。此外,元素的顺序是随机的。所以对于每个元素我都有这个:

if ( index >= vector.size() ) {
    vector.resize ( index + 1 );
}
vector.at ( index ) = element;
Run Code Online (Sandbox Code Playgroud)

如果元素按递增的索引顺序排列,每次调用调整大小时向量容量是否会增加一(在典型的实现中)?我希望不会...

c++ resize capacity stdvector

5
推荐指数
1
解决办法
6257
查看次数

Servlet中的Hibernate导致NoglassDefFoundError:org/slf4j/LoggerFactory

我有一个Java(6)应用程序,它使用Hibernate(V3.3.2)从HSQLDB读取数据,我使用Eclipse(V3.5.1)构建和调试/运行,并且它工作正常.

然后我创建了一个GWT(V1.7)Servlet Web应用程序,将我的hibernate类复制到其中,并添加了相同的用户库依赖项.但是,当我运行servlet并尝试访问调用我的代码的URL时,我得到:

java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:152)
    at xxx.daoimpl.DAOSession.initialise(DAOSession.java:40)
Run Code Online (Sandbox Code Playgroud)

其中DAOSession.java:40是:

AnnotationConfiguration config = new AnnotationConfiguration ();
Run Code Online (Sandbox Code Playgroud)

谷歌搜索此错误表明我从类路径中缺少slf4j-api.jar,但是如果我查看Debug属性的命令行,我可以在那里看到这个jar:

C:\java\jsedk_6\jre\bin\javaw.exe
-agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:54541
-Xmx512m -Dfile.encoding=Cp1252
-classpath
    D:\dev\workspace\xxx\src;
    D:\dev\workspace\xxx\resources;
    D:\dev\workspace\xxx\war\WEB-INF\classes;
    C:\java\eclipse\plugins\com.google.gwt.eclipse.sdkbundle.win32_1.7.1.v200909221731\gwt-windows-1.7.1\gwt-user.jar;
    C:\java\eclipse\plugins\com.google.gwt.eclipse.sdkbundle.win32_1.7.1.v200909221731\gwt-windows-1.7.1\gwt-dev-windows.jar;
    C:\java\hibernate-annotations-3.4.0.GA\hibernate-annotations.jar;
    C:\java\hibernate-annotations-3.4.0.GA\lib\ejb3-persistence.jar;
    C:\java\hibernate-annotations-3.4.0.GA\lib\hibernate-commons-annotations.jar;
    C:\java\hibernate-distribution-3.3.2.GA\hibernate3.jar;
    C:\java\hibernate-distribution-3.3.2.GA\lib\required\antlr-2.7.6.jar;
    C:\java\hibernate-distribution-3.3.2.GA\lib\required\commons-collections-3.1.jar;
    C:\java\hibernate-distribution-3.3.2.GA\lib\required\dom4j-1.6.1.jar;
    C:\java\hibernate-distribution-3.3.2.GA\lib\required\javassist-3.9.0.GA.jar;
    C:\java\hibernate-distribution-3.3.2.GA\lib\required\jta-1.1.jar;
    C:\java\hibernate-validator-4.0.1.GA\hibernate-validator-4.0.1.GA.jar;
    C:\java\hibernate-validator-4.0.1.GA\lib\validation-api-1.0.0.GA.jar;
    C:\java\hibernate-validator-4.0.1.GA\lib\log4j-1.2.14.jar;
    C:\java\hsqldb\lib\hsqldb.jar;
    C:\java\restlet-jse-2.0m5\lib\org.restlet.jar;
    C:\java\restlet-jee-2.0m5\lib\org.restlet.ext.servlet.jar;
    C:\java\restlet-jse-2.0m5\lib\org.restlet.ext.xml.jar;
    C:\java\slf4j-1.5.8\slf4j-api-1.5.8.jar;
    C:\java\slf4j-1.5.8\slf4j-log4j12-1.5.8.jar
    com.google.gwt.dev.HostedMode
    ...
Run Code Online (Sandbox Code Playgroud)

如果我打开jar,我可以在那里看到LoggerFactory类.

知道为什么它没有被类加载器找到?

编辑1:如果尝试从我的代码访问org.slf4j.LoggerFactory,Eclipse编译好了,但我在运行时得到了同样的错误.

编辑2:如果我添加一个带有main的Test类,它调用相同的代码并运行它,它就可以工作.所以这个类路径问题似乎特定于Servlet.

谢谢,琼

java eclipse gwt servlets slf4j

4
推荐指数
1
解决办法
1万
查看次数

来自file_descriptor_source(boost :: iostreams)或文件的istream

我需要为我的程序输入执行类似的操作:

stream input;
if (decompressed)
    input.open(filepath);
else {
    file_descriptor=_popen("decompressor "+filepath,"r");
    input.open(file_descriptor);
}
input.read(...)
...
Run Code Online (Sandbox Code Playgroud)

我可以看到一个解决方案 - 在两种情况下都使用_popen,如果它已经解压缩,只需将文件复制到stdout,但这似乎不是很优雅.

有趣的是,与C相比有多难 - 我想标准库错过了它.现在我迷失在神秘的boost :: iostreams文档中.如果有人知道如何,示例代码会很棒.

c++ boost iostream file stream

4
推荐指数
1
解决办法
5779
查看次数

JSF 1.2 - PostConstruct是在getter之前还是之后执行

我有一个支持bean的代码:

@PostConstruct
 public void refreshData()
 {
  rows  = (int) dd.getRows();
  pages = dd.getPages();
  getRender();
 }

// action
 public void getCount(String sql, Object... values)
  throws Exception
 {
  dd.getCount(sql, values);
  rows  = (int) dd.getRows();
  pages = dd.getPages();
 }

 // getter methods
    public boolean getRender() {
        System.out.println("pages: "+pages);
     boolean rendered = pages > 0? true: false;
     return rendered;
    } 

 public int getRows() {
  return rows;
 }
    public int getPages() {       
     return pages;
    }
Run Code Online (Sandbox Code Playgroud)

带有@PostConstruct指令的refreshData()方法是否在所有getter方法之后或之前执行?我问这个因为我注意到getRender()方法总是返回零,即使getPages()返回一个像10这样的数字.

testing jsf

3
推荐指数
2
解决办法
8745
查看次数

在窗口上绘制位图时不需要的抗锯齿

我正在将图像渲染到System.Drawing.Bitmap中,然后将其绘制到窗口中,但是我可以看到边缘正在消除锯齿.怎么防止这个?

更多细节.像这样创建位图:

new Bitmap (this.Width, this.Height, Imaging.PixelFormat.Format32bppArgb)
Run Code Online (Sandbox Code Playgroud)

然后我将像素设置为Color.Black或Color.White.我尝试使用Bitmap.SetPixel并使用Bitmap.LockBits将字节直接写入位图数据.

一旦位图准备就绪,我将在我的Form.OnPaint覆盖中绘制它:

            pea.Graphics.DrawImage
                ( !this.bitmap
                , this.ClientRectangle
                , new Rectangle (0, 0, this.Width, this.Height)
                , GraphicsUnit.Pixel
                )
Run Code Online (Sandbox Code Playgroud)

每个像素应该是黑色或白色但是我可以看到边缘的像素是灰色的.

.net c# windows graphics gdi+

3
推荐指数
1
解决办法
4646
查看次数

'base'值只能用于直接调用重写成员的基本实现

为什么我不能basef这里调用实现:

type Base = 
    abstract f : int -> int -> int
    default this.f (x : int) (y : int) : int = x + y

type Derived = 
    inherit Base
    override this.f (x : int) (y : int) : int = base.f -x -y
Run Code Online (Sandbox Code Playgroud)

调用base.f引发此编译器错误:

error FS0419: 'base' values may only be used to make direct calls to the base implementations of overridden members
Run Code Online (Sandbox Code Playgroud)

如果我f改为采用单个参数,那么它就会编译.据推测,这与curried参数与tupled参数有关,但上面的代码对我来说很好.

inheritance f# overriding derived base

3
推荐指数
1
解决办法
472
查看次数

OLAP4J 已死了吗?是否有等效的替代品?

OLAP4J(用于连接 XMLA 服务的 Java 库)已经死了吗?表明这一点的事情是:

  • 网站自 2013 年以来就没有更新过。
  • 开发者邮件列表上的最后一条消息是在 2016 年 5 月。
  • 最后一个可用的发布版本是2016 年的1.2.0。有更新的版本标签,但构建工件尚未上传到任何 Maven 存储库。

如果它死了,那么有合适的替代品吗?

java xmla olap4j

3
推荐指数
1
解决办法
2909
查看次数