作为学习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)
我已经检查过,它被设置为生成一个动态链接库.
谢谢.
使用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)
输出.
我有几个遵循这种模式的代码块:
// 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) 据我所知,C++ 标准没有具体说明当 vector::resize 需要增加时如何增加向量容量。但有没有一个“典型”的实现呢?
具体来说:我不知道我的向量需要有多大。此外,元素的顺序是随机的。所以对于每个元素我都有这个:
if ( index >= vector.size() ) {
vector.resize ( index + 1 );
}
vector.at ( index ) = element;
Run Code Online (Sandbox Code Playgroud)
如果元素按递增的索引顺序排列,每次调用调整大小时向量容量是否会增加一(在典型的实现中)?我希望不会...
我有一个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.
谢谢,琼
我需要为我的程序输入执行类似的操作:
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文档中.如果有人知道如何,示例代码会很棒.
我有一个支持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这样的数字.
我正在将图像渲染到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)
每个像素应该是黑色或白色但是我可以看到边缘的像素是灰色的.
为什么我不能base在f这里调用实现:
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参数有关,但上面的代码对我来说很好.
c++ ×3
java ×2
windows ×2
.lib ×1
.net ×1
base ×1
batch-file ×1
boost ×1
c# ×1
capacity ×1
cmd ×1
derived ×1
eclipse ×1
f# ×1
file ×1
gdi+ ×1
graphics ×1
gwt ×1
inheritance ×1
iostream ×1
jsf ×1
monads ×1
olap4j ×1
overriding ×1
resize ×1
scala ×1
scripting ×1
servlets ×1
shell ×1
slf4j ×1
stdvector ×1
stream ×1
testing ×1
xmla ×1