问题标签 [linkage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
flash - AS3 库符号链接
我在使用我创建的类作为库符号的基类时遇到问题:
我创建了一个类AvSkin
,它将作为AvChild
. 它看起来像这样:
显然做的不多,但关键是我可以稍后添加(即render()
方法)。
问题是,因为它扩展DisplayObject
(以便我可以使皮肤 a TextField
、SimpleButton
、Shape
等)而不是MovieClip
,所以如果我将其设置为库符号的基类,它会引发此错误:
5000:类“avian.environment.skins.AvSkin”必须是“flash.display.MovieClip”的子类,因为它链接到该类型的库符号。
有没有解决的办法?我不想做以下任何一个:
- 使
AvSkin
扩展MovieClip
。 - 为我的扩展库符号创建一个类
AvSkin
。
有关扩展 DisplayObject 的详细说明,请参见此处,这可能有助于支持我的问题背后的推理。
c++ - c&c++默认全局变量链接,多重声明&定义问题
例如:
代码1.c / .cpp
代码2.c / .cpp
去编译:
C 和 C++ 之间是否有任何全局变量链接差异?
c# - C++/CLI->C# 错误 C2526:C 链接函数无法返回 C++ 类
我有一个用 VS2010 C# 构建的简单 .NET dll,它公开了一个类的 2 个静态成员
然后我从 VS2010 C++ 创建了一个控制台应用程序,并在 _tmain 上方添加了这个函数
添加引用和编译给了我这个错误
我的一些观察:
- 如果我删除 extern "C",它将成功编译
- 如果我重命名
Test(List<int> test)
为,它将成功编译Test2(List<int> test)
我的问题是,出了什么问题以及如何从 C++ 端修复它。
我目前的解决方法是重命名 C# 中的方法,但我宁愿不必这样做,我觉得我的 C++ 项目中可能缺少一个设置。
编辑:
我在 C++ 中找到了更好的解决方法,看起来我可以将 .NET 调用包装在另一个函数中。
必须这样做似乎很愚蠢,我想知道这是否是编译器错误?让我害怕的是使用这样的方法并且不得不担心 C# 开发人员可能会在以后添加这样的静态方法并破坏 C++ 构建。
c++ - 类有外部链接吗?
我有 2 个文件 A.cpp 和 B.cpp 看起来像
现在我在某处(https://en.cppreference.com/w/cpp/language/static)读到类具有外部链接。因此,在构建时,我期待一个多重定义错误,但相反它就像魅力一样。但是,当我在 A.cpp 中定义类 w 时,我得到了重新定义错误,这让我相信类具有内部链接。
我在这里错过了什么吗?
c++ - 隐式内部链接与显式内部链接(“静态”)不同?
今天我遇到了一个特殊性,虽然可能不是很重要,但让我感到困惑。也许我也只是没有正确理解 C++。
源文件中的一些数组指向字符串文字,如下所示:
GetProcAddress
除了传递以从库中检索函数指针(这是非阻塞动态 OpenAL/EFX/捕获函数加载器和上下文创建器/管理器)之外,这些指针数组都没有以任何方式使用过。
我最终想到,我可能应该声明这些变量,static const
因为在 .cpp 文件之外的任何地方都不需要它们,因此明确内部链接似乎是合适的。它们无论如何都应该有内部链接(ISO14882 3.5(3)),所以我们只是通过明确编译器已经假设的内容来成为好公民。
进行这种无害的更改导致可执行文件大小增加了 512 字节。不像额外的 512b 真的很重要,但完全相同的事情会导致不同的代码似乎没有意义。由于static const
已弃用(ISO14882 7.3.1.1(2)),我也尝试了匿名命名空间,结果相同。
查看汇编源代码表明,显式内部链接 ( static
or namespace{}
) 会将字符串文字移动到.rdata
而不是.data
,并且字符串文字与指针到字符串文字数组交错,而不是将所有字符串和所有指针放在一个块中,分别。这也可能是大小不同的原因——很可能将数据从一个部分改组到另一个部分已经达到了部分大小限制。有趣的是,所有 3 种口味的名称也不同。
现在我想知道:我是否犯了一个谬误,这些指针是否应该没有内部链接?
另外,在我的理解const
中已经是只读的,static const
“更多只读”(一个进入.rdata
而另一个没有)?
c++ - 在命名空间中包装消息常量
我有一系列对应于消息 ID 的常量字符串;我正在尝试为这些常量创建一个集中的位置,因为它们在我的应用程序中的各种类中使用。我最初打算创建一个包含它们的命名空间:
然后我开始阅读内部/外部链接定义,现在我有几个问题。
1)不使常量外部的唯一缺点是我不能将它们用作模板参数,因为它们具有内部链接?
2)我不知道我的方法还有其他缺点吗?
java - WebSphere 中的 XML.loadString 抛出 java.lang.VerifyError
我正在调用XML.loadString(...)
WebSphere 6.1 ND 中的 MDB。我得到了java.lang.VerifyError
,类似于这个问题中描述的。
堆栈跟踪是:
如果我ConstructingParser
也使用它会发生:
我正在使用 Scala v2.9.0.1
如何诊断此类链接问题?
编辑#1
经过一番反思,我意识到问题是在不相关的更改之后发生的。凭直觉,我从 WAS 完全卸载了该应用程序,然后重新安装了它。问题消失了。下一次应用程序更新(即覆盖)后问题再次出现。
又过了几个小时,以及与 Scala XML 解析无关的其他更改,我忘记了卸载/重新安装并进行了更新。问题没有再次出现。我无法再复制这个问题。
编辑#2
问题又回来了,仅靠卸载/重新安装无法解决。使用 Scala 2.8.1 重试,但问题仍然存在。现在将尝试卸载/关闭服务器/删除临时文件/重新安装/重新启动服务器。祝我好运。
c++ - 当应用于命名空间范围内的类时,静态意味着什么?
我知道static
在命名空间范围内意味着“内部链接”。现在考虑以下代码:
static
适用于Foo
,foo
还是两者都适用?
c - 为什么结构定义有内部联系?
(我说的是 C,但它也适用于 C++ 中的类模板)
在头文件中,习惯于放置所有声明,而不是定义。但是,我们通常也将结构定义或类模板放在头文件中,而实际上并不知道为什么可以这样做。这实际上没有任何意义,因为它们也是定义——一个定义规则。(是的,结构定义和类模板不会导致设置任何存储,但您仍然会在下面看到“重新定义”错误,这意味着它们是定义)。
EX)在同一个文件中定义多个具有相同标签的结构会给您重新定义错误,但在多个源文件中定义具有相同标签的多个结构不会导致任何错误(类也会发生同样的事情)。
唯一有意义的是结构定义和类模板具有内部链接(与默认的外部链接相反),但我在 K&R 或参考手册中找不到任何关于它的参考。事实上,连杆连结构都没有提到。
我想知道 ANSI 标准指出这种现象的确切参考。(IMO,这是一个非常模糊的事情,必须在 ANSI 标准中的某个地方提到)。
编辑 我不是在问为什么可以将结构定义放入头文件中。
我在问为什么将结构定义放在头文件中不会像我们将变量定义放在头文件中时那样导致重新定义错误(并将其包含在多个源文件中)
EX) test1.c: int a = 3; test2.c: int a = 4; 由于重新定义导致编译错误。然而,
test1.c: 结构测试 { int a }; test2.c: 结构测试 { int b }; 不会导致编译错误,我能想到的唯一原因是结构定义要么有内部链接,要么根本没有链接。
windows - 链接到 WinNLS
我应该使用什么静态库来链接以使用该NormalizeString()
功能?
与 MSDN 上记录的大多数函数相比,未声明使用该函数所需的静态库。我尝试使用从 DLL 派生的名称:normaliz.lib
并且它成功链接,但是在运行时我收到一个弹出窗口,说Normalization.dll
在我的计算机上找不到并且进程已关闭。