【無料配信♪】Renta !全タテコミ作品第1話

_outpという関数がありますがこれはライブラリ関数ですか?
またライブラリ関数なら、ライブラリだけで実現される関数なのか
それとも、APIを裏で呼び出して実現してる関数なのか
教えてもらえないでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

どこの環境で使っているかな。


_outpは通常ポート出力命令です。I/Oポートへの書き込みを行います。
普通の実装では、CPUのI/O命令か、メモリマップドI/Oのアドレスへの書き込み命令です。APIをコールする実装はしりません。
通常は組込みシステムでI/Oポートにアクセスする場合やデバイスドライバで使います。保護されたOSではユーザランドのアプリケーションから使うことはできないと考える方が良いでしょう。
Microsoft Visual C++の場合、_outpはWindows95~Meでは使えますが、NT系ではユーザプロセスからは公式には使えません。ただしこの使用を可能にするデバイスドライバが出ているようで、それを導入するとNT系でもアプリケーションから使えるようです。

この回答への補足

回答ありがとうございます。
大変参考になりました。

補足日時:2008/09/25 10:50
    • good
    • 0

> _outpという関数がありますが



標準関数にはありません。

お使いの処理系には、その名前の関数があるのかもしれません。
しかし、実装方法については処理系ごとに異なるはずです。

この回答への補足

回答ありがとうございます。
標準関数ではないですね。
ポートI/O関数というみたいです。

仕組みがイマイチつかめないです。。。

補足日時:2008/09/24 22:51
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

QC言語のシリアルポート接続について

 連休中にPC98のMS-DOS機でシリアルポートで遊ぼうと
思いなんとかINP関数が在る事がわかりました。
 しかし使い方がいまいち分りません。

 INP関数にポート番号らしき物を入れてもなんの変化も出て来ま
せん、、、。INP(1)とか、、、。
 それではと、アドレスらしき物を入れようと思うのですが、シリアル
ポートのアドレスがMS-DOSだとどこにあるのかわかりません。
適当に0x00~0x80ぐらいを回してディスプレイしたのですが、それっぽい
数値がありません、、、。

 シリアルポートの接続先は携帯電話で、VBやBASICだと常に
電波状況を携帯に接続すると見えるのですが、C言語だと上手くいきません。

 INPをループさせて、ポートぽいアドレスを何度か見ているのですが、
数値の変化がないし根本が間違ってる気がしてきました。

 どなたか、C言語での簡単なシリアルポート接続を教えて下さい。
 ポートのオープン方法とかがある気がしてたまらないんですが、、、。
 古い言語で申しわけないのですが、宜しくおねがいします。

 連休中にPC98のMS-DOS機でシリアルポートで遊ぼうと
思いなんとかINP関数が在る事がわかりました。
 しかし使い方がいまいち分りません。

 INP関数にポート番号らしき物を入れてもなんの変化も出て来ま
せん、、、。INP(1)とか、、、。
 それではと、アドレスらしき物を入れようと思うのですが、シリアル
ポートのアドレスがMS-DOSだとどこにあるのかわかりません。
適当に0x00~0x80ぐらいを回してディスプレイしたのですが、それっぽい
数値がありません、、、。

 ...続きを読む

Aベストアンサー

あまりの懐かしさに資料をひもときました。

シリアルポート(8251)はデータが30h、コントロールが32hですが、これでおわかりになりますか。その他にボーレートジェネレータとして8253を制御する必要もあります。割り込みを使う場合は8259と8255も制御する必要があります。必要ならこれらの情報もありますので言ってください。

ですが、BIOSコールを使った方がいいでしょう。INT19hで、
AH=00h 初期化
AH=03h で1バイト出力。データはAL
などとやります。もしこの方法でトライされるならもう少し詳細なデータを書きます。

どちらの方法を使うにしてもハード(と言うほどのことはありませんが)の知識が多少必要です。文章で簡単に説明できるようなことではないですが、難しいことではないので是非トライしてみてください。

ここまでの情報は書籍かHPを検索されると出てくるかもしれません。昔はPC98専用のC言語があり、それには専用の関数が準備されていましたが、どの様なC言語をお使いでしょうか。

QCStringからchar*への型変換について教えてください。

以前の質問に

int型 → CString型/char型

がありましたが、

CString型をchar*型に変換する方法を
教えていただければありがたいです。

MSDNで「LPCTSTRキャスト」が説明されていましたが、
例が載ってないのでよくわかりませんでした。

よろしくお願いします。

Aベストアンサー

目的にもよりますが一時的にchar配列として使いたいならCString::GetBuffer()が利用できます。
char配列としての利用が終わったらCString::ReleaseBuffer()する必要がありますが。

直接CString内の文字列を扱う必要があるならCString::operator LPCTSTRで文字列ポインタが得られます。
ただし、CStringオブジェクトをいじると無効ポインタなる可能性があるので気をつけてください。

MSDNのMicrosoft Foundation Classリファレンス→CString→クラスメンバで確認してください。

Qこの はどこに在る? また、参考資料を見たいのですが。

Microsoft Visual Studio 12.0 の VC フォルダにある C 言語環境をコマンドプロンプト画面で操作している者です。お世話になります。
http://oshiete.goo.ne.jp/qa/6784307.html
上記の回答1にフォルダ内のファイル一覧を出すプログラムが紹介されており、素晴らしい動作結果を早速使わせてもらいました。
ところで、このインクルードファイルが見当たりません。marchal_windows.h ってのは在りますが。「Windows 関連の API はダウンロードすべし」とのネット記事もあるのに、そんな事せずに済むのが不思議で。何故でしょう?
また、紹介されている構造体(例:WIN32_FIND_DATA )とか関数(例:FindFirstFile() )の詳細を知りたいです。”The C Library Reference Guide” のごときものはご存じありませんか?

Aベストアンサー

>このインクルードファイルが見当たりません。

環境にもよりますが…
C:\Program Files (x86)\Microsoft SDKs\Windows
のしたのどこか…です。
どのバージョンのSDK使われているか…によりますが。

>「Windows 関連の API はダウンロードすべし」とのネット記事もあるのに、そんな事せずに済むのが不思議で。何故でしょう?

製品版のVisualStudioならインストール時に一緒にインストールされます。
ExpressEditionならVC++2008辺り(2010だったかも知れん)からsdkが同梱されるようになったハズです。
# VC++2005 ExpressEditionは別途インストールが必要。

>紹介されている構造体(例:WIN32_FIND_DATA )とか関数(例:FindFirstFile() )の詳細を知りたいです。

お約束ですが、MSDNサイトで確認してください。
https://msdn.microsoft.com/ja-jp/library/windows/desktop/hh920508%28v=vs.85%29.aspx
辺りですかねぇ……。
右上の検索用のフォームに入力して検索してください。
機械翻訳なので、日本語のページだと構造体の説明やリンクが無かったりするので、そういう場合は英語のページを参照してください。

Win32APIとかまとめられた書籍もあったと思いますが。(ただし最新ではないでしょうが)
http://www.amazon.co.jp/dp/4877832122
とか。

>このインクルードファイルが見当たりません。

環境にもよりますが…
C:\Program Files (x86)\Microsoft SDKs\Windows
のしたのどこか…です。
どのバージョンのSDK使われているか…によりますが。

>「Windows 関連の API はダウンロードすべし」とのネット記事もあるのに、そんな事せずに済むのが不思議で。何故でしょう?

製品版のVisualStudioならインストール時に一緒にインストールされます。
ExpressEditionならVC++2008辺り(2010だったかも知れん)からsdkが同梱されるようになったハズです。
# ...続きを読む

Qエラーについて

プログラムをコンパイルはできるのですが、実行するとエラーが出てしまいます。
run-time error R6000
-stack overflow
と出るのですが、これはどういう意味なのでしょうか?
どこを直せばいいのかわからず困っています。よろしくお願いします。

Aベストアンサー

 スタックとはメモリの一部で、主にローカル変数の確保や関数呼び出し元のアドレス保存、関数へのパラメータ受け渡し領域として使われます。
 stack overflowとは、スタックとして割り当てられているメモリ領域を使い切ってしまったというOSからのエラーメッセージです。

 考え得る原因はpunchan_jpさんのおっしゃる通りです。その中でも一番ありがちなのが、巨大な配列の関数内確保ですね。
 簡単な解決策はグローバル変数にすることです。グローバル変数はスタックとは別のメモリ領域に確保されます。関数内でもstaticを付けて宣言すれば同様になります。
 また、mallocによってメモリを動的確保するのも手です。この場合初期化はできませんが。

 再帰関数の終了条件設定ミスもよくあります。これはアドバイスできる範疇ではないので、もし思い当たるならば、補足辺りにその関数を載せてもらわないと回答はムリですね。

Q「INT86(・・・・・・);」 って何でしょう?(C言語)

C言語のソースをみていると、その中に

INT86();

という関数が出てきました。
しかし、ソースのどこを見ても
その関数が定義されているところがありません。
ほかにIncludeされているファイルは
Windows標準のヘッダーファイルだけでした。

そこで質問なのですが、
この「INT86()」というのは標準の関数なのでしょうか?
ご回答お願いいたします。

Aベストアンサー

int86()は、DOSファンクションコールをするための関数です。
Win32では、ハードウェアレベルに直接アクセスできないので使用できません。

dos.h(だったはず)で宣言されています。
windows.hのなかで、さらにincludeされているはずです。

今となっては検索エンジンで調べてもあんまり出てきませんね。

参考URL:http://www.google.com/search?q=int86&ie=UTF8&oe=UTF8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja

Q?

C Machineをダウンロードして、プログラムを作ったのですが、エラーで「インクルードファイル<conio.h>はオープンできません」と表示されました。なぜオープンできないんでしょうか?わかる方、教えてください。

Aベストアンサー

ほかのコンパイラから、conio.hをもってこればできるかと思いましたが、
LCCの試食版からもってきたらダメでした。
ほかのコンパイラのヘッダファイルだといいかもしれませんが。
ただ、ヘッダファイルにせよ、著作権は存在すると思われるので、そこは気をつけてください。
CMachineではEXEファイルを作ることはできないので、
ほかのフリーコンパイラを探してみてはどうです?

QcharからLPTSTRへの変換方法

リストコントロールにchar型の変数の値を数値として表示させたいのですが、charからLPTSTRへの洗練された変換方法がよくわからないです。

char tempChar;
CString tempString;
tempString.Format("%s", tempChar);
LPTSTR lpsz = new TCHAR[tempString.GetLength()+1];
_tcscpy(lpsz, tempString);

こんなプログラムを考えてみたのですが、汚いような気がします。もっと簡単で洗練された変換方法はないのでしょうか?

Aベストアンサー

wsprintfを使ってはどうでしょうか?

char tmpChar = 100;//表示する数値
TCHAR buf[5];
wsprintf(buf, "%d", tempChar);

QDWORDの実際の型は何でしょうか

VC++.NETの環境です。
DOWRD dw1 = 1;
int i = 2; と定義し
ここで
if ( i > dw1 ){
何かの処理;
}
とコーディングすると
warning C4018: '>' : signed と unsigned の数値を比較しようとしました。
のワーニングがでます。
これは、DWORDがint型でなくunsigned int型のようにも見えます。
ある本によれば(VC++.V.NET逆引き大全500の極意)
DWORD はint型であると記述されています。
もし、int型ならこのワーニングはでないはずなのですが、
なぜでるのでしょうか。又、DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。

Aベストアンサー

型定義が知りたいのならば、宣言ファイルを見れば疑問を挟む余地もありません。
DWORD型はwindef.hで
"typedef unsigned long DWORD;"
と宣言されています。

Visual Studioを使っているのならば、知りたい型の上にマウスポインタを置いて右クリック、ポップアップメニューの「定義へ移動」または「宣言へ移動」で簡単に知ることが出来ます。

QC++でのエラー LNK2001

C++でプログラミング中ビルドしたところ以下のようなエラーが出ました。解決方法がわかりません。どのようにしたら解決できるのでしょうか?

----------------------------------------------------------------

コンパイル中...
sample01.cpp
リンク中...
sample01.obj : error LNK2001: 外部シンボル "__imp__dispose_library" は未解決です
sample01.obj : error LNK2001: 外部シンボル "__imp__get_copyright_information" は未解決です
sample01.obj : error LNK2001: 外部シンボル "__imp__get_version_information" は未解決です
sample01.obj : error LNK2001: 外部シンボル "__imp__initialize_library" は未解決です
sample01.obj : error LNK2001: 外部シンボル "__imp__close_reader_writer" は未解決です
sample01.obj : error LNK2001: 外部シンボル "__imp__get_last_error_types" は未解決です
Debug/Sample01.exe : fatal error LNK1120: 外部参照 6 が未解決です。
link.exe の実行エラー

C++でプログラミング中ビルドしたところ以下のようなエラーが出ました。解決方法がわかりません。どのようにしたら解決できるのでしょうか?

----------------------------------------------------------------

コンパイル中...
sample01.cpp
リンク中...
sample01.obj : error LNK2001: 外部シンボル "__imp__dispose_library" は未解決です
sample01.obj : error LNK2001: 外部シンボル "__imp__get_copyright_information" は未解決です
sample01.obj : error LNK2001: 外部シンボル "__imp__get_v...続きを読む

Aベストアンサー

該当関数を使用しているソースコードに
#pragma comment(lib,"使用しているlib名.lib")

[プロジェクト] -> [設定] -> [リンク] -> [一般] の
オブジェクト/ライブラリ モジュール

使用しているlib名
を設定しているか確認してみてください。


人気Q&Aランキング