我需要 在我的C++代码中集成这个C#dll.我想用dll调用一些用C#编写的函数,用C++编写其余的代码.什么是最简单,最快捷的方法?该程序将仅在Windows上执行.
有一次,我的老师教我使用randomize()和random()函数在C++ Builder中生成伪随机数.现在我更喜欢在VS 2012中工作,但当我尝试使用这些功能时,它会说"找不到标识符",即使我添加了#include <stdlib.h>.谷歌搜索后的一段时间,我发现,也有rand()和srand()功能.它们之间有什么区别,哪个更好用?
以下代码:
#include <iostream>
#include <Windows.h>
using namespace std;
int main ()
{ LPWSTR buffer; //or wchar_t * buffer;
GetModuleFileName(NULL, buffer, MAX_PATH) ;
cout<<buffer;
cin.get();
cin.get();
}
Run Code Online (Sandbox Code Playgroud)
应该显示程序执行的完整路径.但是在VS 2012中我得到了错误:
使用未初始化的局部变量'缓冲区'
代码有什么问题?
我在Visual Studio中创建的asm项目调用C函数时遇到问题(Win10 x64,Visual Studio 2015).项目由一个asm文件组成:
.586
.model flat, stdcall
option casemap:none
includelib msvcrt.lib
ExitProcess PROTO return:DWORD
extern printf:near
.data
text BYTE "Text", 0
.code
main PROC
push offset text
call printf
add esp,4
invoke ExitProcess,0
main ENDP
end main
Run Code Online (Sandbox Code Playgroud)
当我构建项目时,链接器输出错误:
错误LNK2019未解析的函数_main @ 0中引用的外部符号_printf
链接器输出参数:
/OUT:"C:\Users\apple\Documents\SP_Lab7\Debug\SP_Lab7_Demo.exe"/ MANIFEST:NO/NXCOMPAT /PDB:"C:\Users\apple\Documents\SP_Lab7\Debug\SP_Lab7_Demo.pdb"/ DYNAMICBASE "kernel32.lib""user32.lib""gdi32.lib""winspool.lib""comdlg32.lib""advapi32.lib""shell32.lib""ole32.lib""oleaut32.lib""uuid.lib" "odbc32.lib""odbccp32.lib"/ MACHINE:X86/SAFESEH:NO/INCREMENTAL:NO /PGD:"C:\Users\apple\Documents\SP_Lab7\Debug\SP_Lab7_Demo.pgd"/ SUBSYSTEM:WINDOWS/MANIFESTUAC: "level ='asInvoker'uiAccess ='false'"/ ManifestFile:"Debug\SP_Lab7_Demo.exe.intermediate.manifest"/ ERRORREPORT:PROMPT/NOLOGO/TLBID:1
如果我发表评论call print,那么一切都正常执行(甚至是Windows API函数).有没有办法从asm文件调用C函数而不创建包含的cpp文件<cstdio>?有可能吗?
我正在阅读"Effective Objective-C 2.0:52改进iOS和OS X程序的具体方法".在"第6项"中,作者说在公共ivar上使用指针是一个坏主意,因为编译后的代码将具有硬编码指针偏移量,并且当新的ivar将被添加到类中时,之前使用的指向某些ivars的指针现在可以指向其他变量.
@interface Foo
{
@public
NSString * string;
NSArray * arr;
}
@end
@implementation
...
@end
int main()
{
@autoreleasepool
{
Foo *f=[Foo new];
f->string; //Is it bad idea?
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,ivars和属性是不是动态的(在编译时不知道偏移量)?正如Cocoa With Love所说:
"所有ivars在现代运行时都是动态的:由于所有ivars遵循此过程,这意味着现代Objective-C运行时中的所有ivars都是动态的,因为它们的绝对偏移在编译时永远不会被知道."
如果这是真的,那么为什么在伊塔尔上使用指针不好呢?请提供尽可能多的低级细节.
例如,如果在代码中编写这些语句:
char a[10];
char b[10];
cin>>a;
cin>>b;
Run Code Online (Sandbox Code Playgroud)
cin>>b;没有看到Enter键入后按下的键,例如Hello
但是当cin>>b;写入cin.get(b, 10);然后从先前的语句中cin.get(b, 10);读取Enter键时.
c++ ×4
assembly ×1
c# ×1
cin ×1
dll ×1
ivar ×1
masm ×1
objective-c ×1
properties ×1
random ×1
visual-c++ ×1
x86 ×1